C64指令集v0.0.2.doc_第1页
C64指令集v0.0.2.doc_第2页
C64指令集v0.0.2.doc_第3页
C64指令集v0.0.2.doc_第4页
C64指令集v0.0.2.doc_第5页
已阅读5页,还剩176页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

C64指令集目 录1.ABS指令42.ABS2指令63.ADD指令74.ADDAB指令105.ADDAD指令126.ADDAH指令127.ADDAW指令148.ADDK指令159.ADDKPC指令1610.ADDSUB指令1711.ADDSUB2指令1812.ADDU指令1913.ADD2指令2014.ADD4指令2215.AND指令2316.ANDN指令2517.AVG2指令2618.AVG4指令2719.AVG2指令2920.AVGU4指令2921.B指令3022.B指令3123.B指令3224.B指令3325.BDEC指令3426.BITC4指令3527.BITR指令3628.BNOP指令3629.BNOP指令3730.BPOS指令3831.CLR指令3932.CMPEQ指令3933.CMPEQ2指令4034.CMPEQ4指令4135.CMPGT指令4236.CMPGT2指令4337.CMPGTU指令4438.CMPGTU4指令4539.CMPLT指令4640.CMPLT2指令4741.CMPLTU指令4842.CMPLT2指令4943.DEAL指令5044.DOTP2指令5145.DOTPN2指令5246.DOTPNRSU2指令5247.DOTP点乘指令5348.EXT指令5749.GMPY4指令5950.IDLE指令6051.LDB(U)指令6152.LDDW指令6453.LDH(U)指令6654.LDH(U)指令6755.LDNDW指令6856.LDNW指令6957.LDW指令7158.LDW指令7259.LMBD指令7360.MAX2指令7461.MAXU4指令7662.MIN2指令7763.MINU4指令7864.MPY指令8065.MPYH指令8166.MPYHI指令8267.MPYHIR指令8368.MPYHL指令8469.MPYHLU指令8570.MPYHSLU指令8571.MPYHSU指令8672.MPYHU指令8773.MPYHULS指令8874.MPYHUS指令8875.MPYIH指令8976.MPYIHR指令8977.MPYIL指令9078.MPYLIR指令9079.MPYLSHU指令9280.MPYLUHS指令9381.MPYSU指令9482.MPYSU4指令9583.MPYU指令9784.MPYU4指令9885.MPYUS指令10086.MPYUS4指令10187.MPY2指令10288.MV指令10489.MVC指令10590.MVD指令10691.MVK指令10792.MVKH指令10893.MVKLH指令10994.MVKL指令11095.NEG指令11196.NOP指令11297.NORM指令11398.NOT指令11499.OR指令115100.PACK2指令116101.PACKH2指令117102.PACKH4指令118103.PACKHL2指令119104.PACKLH2指令120105.PACKL4指令121106.ROTL指令122107.SADD指令123108.SADD2指令125109.SADDUS2指令126110.SADDU4指令127111.SAT指令128112.SET指令130113.SHFL指令132114.SHL指令133115.SHLMB指令134116.SHR指令135117.SHR2指令136118.SHRMB指令137119.SHRU指令138120.SHRU2指令139121.SMPY指令140122.SMPYH指令141123.SMPYHL指令142124.SMPYLH指令143125.SMPY2指令144126.SPACK2指令145127.SPACKU4指令146128.SSHL指令148129.SSHVL 指令149130.SSHVR指令151131.SSUB指令153132.STB指令155133.STB(15BIT偏移)指令156134.STDW指令157135.STH指令159136.STH(15BIT偏移)指令160137.STNDW指令161138.STNW指令162139.STW指令163140.STW(15BIT偏移)指令165141.SUB指令166142.SUBAB指令167143.SUBABS4指令168144.SUBAH指令169145.SUBAW指令169146.SUBC指令170147.SUBU指令171148.SUB2指令171149.SUB4指令172150.SWAP2指令173151.SWAP4指令174152.UNPKHU4指令174153.UNPKLU4指令175154.XOR指令176155.XPND2指令177156.XPND4指令178157.ZERO指令1791. ABS指令指令符号ABS指令格式ABS (.unit) src2, dstorABS (.unit) src2_h:src2_l,dst_h:dst_lunit = .L1 or .L2功能单元unit = .L1 or .L2兼容性C62x, C64x, and C64x+ CPU指令类型单周期指令延迟时隙0操作码指令描述src2 的绝对值储存于dst中。当src2是一个sint (有符号的整形)时,src2 的绝对值由以下决定:1. If src2 0, then src2 dst2. If src2 0, then src2 dst_h:dst_l2. If src2 0 and src2 -239, then -src2 dst_h:dst_l3. If src2 = -239, then 239 - 1 dst_h:dst_l指令执行if (cond) abs(src2) dstelse nop流水线类似指令ABS2举 例2. ABS2指令指令符号ABS2指令格式ABS2 (.unit) src2, dstunit = .L1 or .L2功能单元.L1 or .L2兼容性C64x and C64x+ CPU指令类型单周期指令延迟时隙0操作码指令描述Src2操作数前半部分与后半部分的绝对值分别放在dst 的前半部分与后半部分。. 具体地讲,这条指令对src2的前半部分与后半部分执行下面的步骤,然后写到dst的相应的部分。1. If the value is between 0 and 215, then value dst2. If the value is less than 0 and not equal to -215, then -value dst3. If the value is equal to -215, then 215 -1 dst注意:这个操作是对每个16比特的值单独地进行操作,这条指令并不影响CSR的SAT比特位。指令执行if (cond) abs(lsb16(src2) lsb16(dst)abs(msb16(src2) msb16(dst)else nop流水线类似指令ABS举 例3. ADD指令指令符号SSHL指令格式ADD (.unit) src1, src2, dstorADD (.L1 or .L2) src1, src2_h:src2_l, dst_h:dst_lorADD (.D1 or .D2) src2, src1, dst (if the cross path form is not used)orADD (.D1 or .D2) src1, src2, dst (if the cross path form is used)orADD (.D1 or .D2) src2, src1, dst (if the cross path form is used with a constant)unit = .D1, .D2, .L1, .L2, .S1, .S2功能单元unit = .D1, .D2, .L1, .L2, .S1, .S2兼容性C62x, C64x, and C64x+ CPU指令类型单周期指令延迟时隙0操作码.L unit.S unit指令描述指令执行.D unit (没用交叉路径).D unit (用了交叉路径).D unit (用了交叉路径和常量)指令描述指令执行流水线类似指令ADDU, ADD2, SADD举 例4. ADDAB指令指令符号ADDAB指令格式ADDAB (.unit) src2, src1, dst (C64x and C64x+ CPU)orADDAB (.unit) B14/B15, ucst15, dst (C64x+ CPU)unit = .D1 or .D2功能单元.D1 or .D2兼容性C62x, C64x, and C64x+ CPU指令类型单周期指令延迟时隙0操作码指令描述对于C64x 和 C64x+ CPU, 用src2特定的字节寻址模式把src1加到src2。加法默认地为线性模式。但是,如果src2是A4A7或B4B7中的一个,则可通过写相应的值到AMR,把模式改成循环模式。此操作的结果存于dst中。指令执行if (cond) src2 +a src1 dstelse nop流水线类似指令ADDAD, ADDAH, ADDAW举 例5. ADDAD指令指令符号ADDAD指令格式ADDAD (.unit) src2, src1, dstunit = . D1 or .D2功能单元.D1 or .D2兼容性C64x and C64x+ CPU指令类型单周期指令延迟时隙0操作码指令描述用src2特定的双字寻址模式把src1加到src2。加法默认地为线性模式。加法默认地为线性模式。但是,如果src2是A4A7或B4B7中的一个,则可通过写相应的值到AMR,把模式改成循环模式。由于是双字数据大小,把src1左移3位。此操作的结果存于dst中。注意;指令集没有SUBAD指令。指令执行if (cond) src2 + (src1 3) dstelse nop流水线类似指令ADDAD, ADDAH, ADDAW举 例6. ADDAH指令指令符号ADDAH指令格式ADDAH (.unit) src2, src1, dst (C64x and C64x+ CPU)orADDAH (.unit) B14/B15, ucst15, dst (C64x+ CPU)unit = .D1 or .D2功能单元.D1 or .D2兼容性C62x, C64x, and C64x+ CPU指令类型单周期指令延迟时隙0操作码指令描述对于C64x and C64x+ CPU,用src2特定的半字寻址模式把src1加到src2。加法默认地为线性模式。加法默认地为线性模式。但是,如果src2是A4A7或B4B7中的一个,则可通过写相应的值到AMR,把模式改成循环模式。把src1左移1位。此操作的结果存于dst中。指令执行if (cond) src2 +a src1 dstelse nop流水线类似指令ADDAD, ADDAH, ADDAW举 例7. ADDAW指令指令符号ADDAW指令格式ADDAW (.unit) src2, src1, dst (C64x and C64x+ CPU)orADDAW (.unit) B14/B15, ucst15, dst (C64x+ CPU)unit = .D1 or .D2功能单元.D1 or .D2兼容性C62x, C64x, and C64x+ CPU指令类型单周期指令延迟时隙0操作码指令描述对于C64x and C64x+ CPU,用src2特定的字寻址模式把src1加到src2。加法默认地为线性模式。加法默认地为线性模式。但是,如果src2是A4A7或B4B7中的一个,则可通过写相应的值到AMR,把模式改成循环模式。把src1左移2位。此操作的结果存于dst中。指令执行if (cond) src2 +a src1 dstelse nop流水线类似指令ADDAD, ADDAH, ADDAW举 例8. ADDK指令指令符号ADDK指令格式ADDK (.unit) cst, dstunit = .S1 or .S2功能单元.S1 or .S2兼容性C62x, C64x, and C64x+ CPU指令类型单周期指令延迟时隙0操作码指令描述把16比特有符号的常量,cst16,加到指定的dst上。此操作的结果存于dst中。指令执行if (cond) cst16 + dst dstelse nop流水线举 例9. ADDKPC指令指令符号ADDKPC指令格式ADDKPC (.unit) src1, dst, src2unit = .S2功能单元.S2兼容性C64x and C64x+ CPU指令类型单周期指令延迟时隙0操作码指令描述把7比特有符号的常量,src1,左移2位,然后加到包含有ADDKPC指令(PCE1)的指址包的第一个指令的地址上。把操作的结果存于dst中。3比特无符号的常量,src2,指定了插入到当前指令的NOP循环的操作数目,这条指令有助于减少产生函数“call”(function call)的返回地址需要的指令数目。以下的例子:B .S2 funcMVKL .S2 LABEL, B3MVKH .S2 LABEL, B3NOP 3LABEL可以被替换成:B .S2 funcADDKPC .S2 LABEL, B3, 4LABELLABEL与右移2位的PCE1的不同之处就在于编码的7比特值src1,LABEL的地址必须在PCE1的9比特之内。在每个周期中只能执行一个ADDKPC指令。在相同的执行包中,不能把ADDKPC与任何相关的跳转指令并行。如果在相同的执行包中存在ADDKPC与相关的跳转指令,并且在跳转指令发生的时候,同时执行ADDKPC指令,结果是不确定的。在相同的执行包中,不能把ADDKPC指令与任何其它的多周期的NOP指令并行,产生多周期的NOP指令为:IDLE, BNOP和多周期的NOP指令执行if (cond) (scst7 1) lsb16(dst);(msb16(src1) + msb16(src2) + 1) 1) msb16(dst)else nop流水线类似指令AVG4举 例18. AVG4指令指令符号AVG4指令格式AVGU4 (.unit) src1, src2, dstunit = .M1 or .M2功能单元.M1 or .M2兼容性C64x and C64x+ CPU指令类型2周期指令延迟时隙1操作码指令描述对打包成16比特的数据执行平均操作。视src1与src2的值为无符号的打包成的8比特的数据,操作的结果也是按无符号的打包成8比特的形式储存的。对于每一对src1与src2中的无符号的8比特的值,AVG4计算两个值的平均值,操作的结果以无符号的8比特的形式存于dst相应的位置。取平均操作是先把两个16比特的数的总和加上1再取平均值,然后把结果右移1位得到8比特结果。不存在溢出条件。指令执行if (cond) (ubyte0(src1) + ubyte0(src2) + 1) 1) ubyte0(dst);(ubyte1(src1) + ubyte1(src2) + 1) 1) ubyte1(dst);(ubyte2(src1) + ubyte2(src2) + 1) 1) ubyte2(dst);(ubyte3(src1) + ubyte3(src2) + 1) 1) ubyte3(dst)else nop流水线类似指令AVG2举 例19. AVG2指令指令符号AVG2指令格式src1, src2, dst功能单元.M1或.M2指令类型2个指令周期延迟时隙1指令描述16-bit 数据的平均操作.平均操作是在两个16bit数之和加1之后,再右移一位产生16bit数指令执行if (cond) (lsb16(src1) + lsb16(src2) + 1) 1) lsb16(dst);(msb16(src1) + msb16(src2) + 1) 1) msb16(dst)else nop流水线类似指令AVGU4举 例20. AVGU4指令指令符号AVGU4指令格式src1, src2, dst功能单元.M1或.M2指令类型2个指令周期延迟时隙16-bit 数据的平均操作.平均操作是在两个16bit数之和加1之后,再右移一位产生16bit数指令描述8-bit 数据的平均操作. src1 and src2 都是8bit无符号数据,平均结果也是无符号8bit数据,平均操作是在两个8bit数之和加1之后,再右移一位产生8bit数。指令执行if (cond) (ubyte0(src1) + ubyte0(src2) + 1) 1) ubyte0(dst);(ubyte1(src1) + ubyte1(src2) + 1) 1) ubyte1(dst);(ubyte2(src1) + ubyte2(src2) + 1) 1) ubyte2(dst);(ubyte3(src1) + ubyte3(src2) + 1) 1) ubyte3(dst)else nop流水线类似指令AVG2举 例21. B指令指令符号B:Branch Using a Displacement指令格式B (.unit) label功能单元.S1或.S2指令类型Branch延迟时隙5指令描述一个21bit有符号常数,cst21,被左移2bit,然后加到包含跳转指令的所取包的第一个指令的地址。结果放到PFC。汇编器/连接器会根据cst21 = (label - PCE1) 2自动算出c st21的正确地址。没有定义两个跳转指令在相同的执行包里和被执行。两个跳转指令可以再相同的执行包里,如果一个跳转用了替代符而其他的用了寄存器,IRP,NRP。只要仅仅只有一个跳转是真条件,代码会按照定义明确的方式去执行。指令执行if (cond) (cst21 = 0), PFC = (PCE1 + se(scst10) = 0), dst = dst - 1;else nopelse nop流水线类似指令举 例26. BITC4指令指令符号BITC4: Bit Count, Packed 8-Bit指令格式BITC4 (.unit) src2, dst功能单元.M1或.M2指令类型2个指令周期延迟时隙1指令描述src2中每8bit计算1的个数。指令执行if (cond) bit_count(src2(ubyte0) ubyte0(dst);bit_count(src2(ubyte1) ubyte1(dst);bit_count(src2(ubyte2) ubyte2(dst);bit_count(src2(ubyte3) ubyte3(dst)else nop流水线类似指令举 例27. BITR指令指令符号BITR: Bit Reverse指令格式BITR (.unit) src2, dst功能单元.M1或M2指令类型2个指令周期延迟时隙1指令描述倒序32bit的数,把bit0的值变为bit31的值,bit1的值变为bit30的值,等等指令执行if (cond) bit_reverse(src2) dstelse nop流水线类似指令举 例28. BNOP指令指令符号BNOP: Branch Using a Displacement With NOP指令格式BNOP (.unit) src2, src1功能单元.S1或.S2指令类型Branch延迟时隙5指令描述常数替换符形式的BNOP指令和NOP指令做一个相对的跳转。这个指令用src2中的12bit有符号常数做这个相关的跳转,常数被被左移2bit,然后加到包含BNOP指令的所取包的第一个指令的地址。结果放到PFC。Src1中的3bit无符号常数给出了NOP指令被插入的延迟时隙的个数,从0到7,0表示没有NOP周期被插入。当NOP指令被要求满足跳转延迟时隙时,这个指令帮助减少执行跳转指令的个数。下面的代码:B .S1 LABELNOP NLABEL: ADD可以被替换为:BNOP .S1 LABEL, NLABEL: ADD指令执行if (cond) PFC = (PCE1 + (se(scst12) = 0), PFC = (PCE1 + (se(scst10) csta, 将src2中csta到 cstb比特位清零后存入dst。Csta和 cstb可以是常数,也可以是cstb 为src14.0,csta为src19.5。在下面的例子中csta是 15 ,cstb是 23。对于cstb csta:if (cond) src2 clear csta, cstb dstelse nopIf the register form is used when cstb csta:if (cond) src2 clear src19.5, src14.0 dstelse nop流水线类似指令举 例32. CMPEQ指令指令符号CMPEQ :Compare for Equality, Signed Integer指令格式CMPEQ (.unit) src1, src2, dst功能单元.L1或.L2指令类型单指令周期延迟时隙0指令描述如果src1 等于src2, 1 写入 dst; 否则, 0 写入 dst.指令执行if (cond) if (src1 = src2), 1 dstelse 0 dstelse nop流水线类似指令CMPEQ2, CMPEQ4举 例33. CMPEQ2指令指令符号CMPEQ2指令格式src1,src2,dst功能单元.S1或.S2指令类型单指令周期延迟时隙0指令描述执行16位数据相等比较,src1中的每16位值与src2中相应的每16位值进行比较,相等时返回一个1,不相等时返回一个0。结果被放在dst最低两位。指令执行if (cond) if(lsb16(src1)=lsb16(src2),1dst0else 0dst0;if(msb16(src1)=msb16(src2),1dst1else 0dst1else nop流水线类似指令CMPEQ,CMPEQ4,,CMPGT2,,XPND2举 例34. CMPEQ4指令指令符号CMPEQ2指令格式src1,src2,dst功能单元.S1或.S2指令类型单指令周期延迟时隙0指令描述执行8位数据相等比较,src1中的每8位值与src2中相应的每8位值进行比较,相等时返回一个1,不相等时返回一个0。结果被放在dst最低四位。指令执行if (cond) if(sbyte0(src1)=sbyte0 (src2),1dst0else 0dst0;if(sbyte1(src1)=sbyte1 (src2),1dst1else 0dst1;if(sbyte2(src1)=sbyte2 (src2),1dst2else 0dst2;if(sbyte3(src1)=sbyte3 (src2),1dst3else 0dst3else nop流水线类似指令CMPEQ,CMPEQ2,,CMPGTU4,,XPND4举 例35. CMPGT指令指令符号CMPGT指令格式src1,src2,dst功能单元.L1或.L2指令类型单指令周期延迟时隙0指令描述执行一次src1与src2的有符号比较,如果src1大于src2,1被写入dst,否则0被写入dst.指令执行if (cond) if(src1src2),1dstelse 0dstelse nop流水线类似指令CMPGT2,CMPGTU,,CMPGTU4举 例36. CMPGT2指令指令符号CMPGT2指令格式src1,src2,dst功能单元.S1或.S2指令类型单指令周期延迟时隙0指令描述执行16位有符号大小比较,src1中的每16位值与src2中相应的每16位值进行比较,src1大于src2时返回一个1,否则返回一个0。结果被放在dst最低两位。指令执行if (cond) if(lsb16(src1)l

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论