这是在Apple M1中的CPU中的微型建筑文件的早期尝试,灵感来自Andreas Abel,Andrei Frumusanu,@Veedrac,Travis Downs,Henry Wongand Aganter Fog的惊人工作。本文档是我的最佳努力,但它基于黑匣子逆向工程,肯定会有错误。没有任何形式的保修(而不仅仅是作为法律技术性)。为了更容易验证信息和/或识别此类错误,指令表中的条目链接到实验和结果(〜35K计数器值)。
这些被称为"单位"如果Apple发布官方文件,则尝试避免混淆,因为他们可以将它们称为"端口"或者"管道",它们不同地订购。 (如果这只是引起更多的混乱,我道歉。)
整数单位:1:alu +标志+分支+ ADR + MSR / MRS NZCV + MRS 2:ALU + FLAGS + BRANCL + ADR + MRS / MRS NZCV 3:ALU + FLAGS + MOV-FROM-SIMD / FP? 4:alu + mov-from-simd / fp? 5:ALU + MUL + DEV 6:ALU + MUL + MADD + CRC + BFM / extload和商店单位(最多128位负载和商店,包括转移到LSL#3的地址生成):7:Store + AMX 8:负载/存储+ AMX 9:负载10:LoadFP / SIMD单元:11:FP / SIMD 12:FP / SIMD 13:FP / SIMD + FCSEL +至-GPR 14:FP / SIMD + FCSEL +至GPR + FCMP / E + FDIV + FRECPE + FRSQRTE + FJCVTZS + URSQRTE + URECPE + SHA
如果在指令流中连续出现,则某些指令能够作为一个UOP发出。
添加/潜艇/和/和CMP / TST + B.CC(完全融合当融合指令时每6条指令读取不超过4个寄存器)
PMULL + EOR(通常融合如果操作数匹配模式" a,b,c; a,a,d"或" a,b,c; a,d,a")
AMX + AMX(不包括负载和商店 - 可能融合到STP的内容)
MOV IMM / MOVZ / MOVN(每8条指令的最大2个由Renamer处理,包括所有测试" MOV")
MADD' S输出可以通过1c延迟传递给第三个操作数(附加品),但如果它'与其他指令链接,它有3c延迟。
负载可以传递给具有3C延迟的其他负载的基础地址(对于链接列表很好),但用alu操作链接给出了4c的延迟。 (尽管LDP中的第二个目的地寄存器始终具有4C延迟。)
SIMD / FP往返延迟的整数可以低至7C(例如链接标志操作时)。
Firestorm每周期可以退出八个指令,但可以发出更多UOPS(使用隐式移位或在ALU操作上延伸,因此其他UOPS单独退休)。
这些数字主要来自M1缓冲区大小测量工具。M1似乎在验证缓冲区的行中使用某些东西,而不是传统的重新排序缓冲区,它符合测量值。所以这些可能或可能不准确。