# The Sparc VIS1 vector instruction set # The opcodes below that have their pcodeop uncommented have been checked to make sure # that the register width is correct. If the call to the pcodeop is still commented out # that means that the register width may be incorrect. For example, a call to a 64 bit # floating point register may really use a 32 bit register. # VIS2 or VIS2+ instructions are not included in this file. define pcodeop alignaddr; :alignaddr RS1,RS2,rd is opf = 0x18 & op3 = 0x36 & op = 0x2 & RS1 & RS2 & rd { rd = alignaddr(RS1,RS2); } define pcodeop alignaddrl; :alignaddrl RS1,RS2,rd is opf = 0x1a & op3 = 0x36 & op = 0x2 & RS1 & RS2 & rd { rd = alignaddrl(RS1,RS2); } define pcodeop array16; :array16 RS1,RS2,rd is opf = 0x12 & op3 = 0x36 & op = 0x2 & RS1 & RS2 & rd { rd = array16(RS1,RS2); } define pcodeop array32; :array32 RS1,RS2,rd is opf = 0x14 & op3 = 0x36 & op = 0x2 & RS1 & RS2 & rd { rd = array32(RS1,RS2); } define pcodeop array8; :array8 RS1,RS2,rd is opf = 0x10 & op3 = 0x36 & op = 0x2 & RS1 & RS2 & rd { rd = array8(RS1,RS2); } define pcodeop edge16cc; :edge16cc RS1,RS2,rd is opf = 0x4 & op3 = 0x36 & op = 0x2 & RS1 & RS2 & rd { rd = edge16cc(RS1,RS2); } define pcodeop edge16lcc; :edge16lcc RS1,RS2,rd is opf = 0x6 & op3 = 0x36 & op = 0x2 & RS1 & RS2 & rd { rd = edge16lcc(RS1,RS2); } define pcodeop edge32cc; :edge32cc RS1,RS2,rd is opf = 0x8 & op3 = 0x36 & op = 0x2 & RS1 & RS2 & rd { rd = edge32cc(RS1,RS2); } define pcodeop edge32lcc; :edge32lcc RS1,RS2,rd is opf = 0xa & op3 = 0x36 & op = 0x2 & RS1 & RS2 & rd { rd = edge32lcc(RS1,RS2); } define pcodeop edge8cc; :edge8cc RS1,RS2,rd is opf = 0x0 & op3 = 0x36 & op = 0x2 & RS1 & RS2 & rd { rd = edge8cc(RS1,RS2); } define pcodeop edge8lcc; :edge8lcc RS1,RS2,rd is opf = 0x2 & op3 = 0x36 & op = 0x2 & RS1 & RS2 & rd { rd = edge8lcc(RS1,RS2); } define pcodeop faligndata; :faligndata fdrs1,fdrs2,fdrd is opf = 0x48 & op3 = 0x36 & op = 0x2 & fdrs1 & fdrs2 & fdrd { fdrd = faligndata(fdrs1,fdrs2); } define pcodeop fandd; :fandd fdrs1,fdrs2,fdrd is opf = 0x70 & op3 = 0x36 & op = 0x2 & fdrs1 & fdrs2 & fdrd { fdrd = fandd(fdrs1,fdrs2); } define pcodeop fandnot1d; :fandnot1d fdrs1,fdrs2,fdrd is opf = 0x68 & op3 = 0x36 & op = 0x2 & fdrs1 & fdrs2 & fdrd { fdrd = fandnot1d(fdrs1,fdrs2); } define pcodeop fandnot1s; :fandnot1s fdrs1,fdrs2,fdrd is opf = 0x69 & op3 = 0x36 & op = 0x2 & fdrs1 & fdrs2 & fdrd { fdrd = fandnot1s(fdrs1,fdrs2); } define pcodeop fandnot2d; :fandnot2d fdrs1,fdrs2,fdrd is opf = 0x64 & op3 = 0x36 & op = 0x2 & fdrs1 & fdrs2 & fdrd { fdrd = fandnot2d(fdrs1,fdrs2); } define pcodeop fandnot2s; :fandnot2s fdrs1,fdrs2,fdrd is opf = 0x65 & op3 = 0x36 & op = 0x2 & fdrs1 & fdrs2 & fdrd { fdrd = fandnot2s(fdrs1,fdrs2); } define pcodeop fands; :fands fdrs1,fdrs2,fdrd is opf = 0x71 & op3 = 0x36 & op = 0x2 & fdrs1 & fdrs2 & fdrd { fdrd = fands(fdrs1,fdrs2); } define pcodeop fexpand; :fexpand fsrs2,fdrd is opf = 0x4d & op3 = 0x36 & op = 0x2 & fsrs2 & fdrd { fdrd = fexpand(fsrs2); } define pcodeop fmul8sux16; :fmul8sux16 fdrs1,fdrs2,fdrd is opf = 0x36 & op3 = 0x36 & op = 0x2 & fdrs1 & fdrs2 & fdrd { fdrd = fmul8sux16(fdrs1,fdrs2); } define pcodeop fmul8ulx16; :fmul8ulx16 fdrs1,fdrs2,fdrd is opf = 0x37 & op3 = 0x36 & op = 0x2 & fdrs1 & fdrs2 & fdrd { fdrd = fmul8ulx16(fdrs1,fdrs2); } define pcodeop fmul8x16; :fmul8x16 fdrs1,fdrs2,fdrd is opf = 0x31 & op3 = 0x36 & op = 0x2 & fdrs1 & fdrs2 & fdrd { fdrd = fmul8x16(fdrs1,fdrs2); } define pcodeop fmul8x16al; :fmul8x16al fdrs1,fdrs2,fdrd is opf = 0x35 & op3 = 0x36 & op = 0x2 & fdrs1 & fdrs2 & fdrd { fdrd = fmul8x16al(fdrs1,fdrs2); } define pcodeop fmul8x16au; :fmul8x16au fdrs1,fdrs2,fdrd is opf = 0x33 & op3 = 0x36 & op = 0x2 & fdrs1 & fdrs2 & fdrd { fdrd = fmul8x16au(fdrs1,fdrs2); } define pcodeop fmuld8sux16; :fmuld8sux16 fdrs1,fdrs2,fdrd is opf = 0x38 & op3 = 0x36 & op = 0x2 & fdrs1 & fdrs2 & fdrd { fdrd = fmuld8sux16(fdrs1,fdrs2); } define pcodeop fmuld8ulx16; :fmuld8ulx16 fdrs1,fdrs2,fdrd is opf = 0x39 & op3 = 0x36 & op = 0x2 & fdrs1 & fdrs2 & fdrd { fdrd = fmuld8ulx16(fdrs1,fdrs2); } define pcodeop fnandd; :fnandd fdrs1,fdrs2,fdrd is opf = 0x6e & op3 = 0x36 & op = 0x2 & fdrs1 & fdrs2 & fdrd { fdrd = fnandd(fdrs1,fdrs2); } define pcodeop fnands; :fnands fdrs1,fdrs2,fdrd is opf = 0x6f & op3 = 0x36 & op = 0x2 & fdrs1 & fdrs2 & fdrd { fdrd = fnands(fdrs1,fdrs2); } define pcodeop fnord; :fnord fdrs1,fdrs2,fdrd is opf = 0x62 & op3 = 0x36 & op = 0x2 & fdrs1 & fdrs2 & fdrd { fdrd = fnord(fdrs1,fdrs2); } define pcodeop fnors; :fnors fdrs1,fdrs2,fdrd is opf = 0x63 & op3 = 0x36 & op = 0x2 & fdrs1 & fdrs2 & fdrd { fdrd = fnors(fdrs1,fdrs2); } define pcodeop fnot1d; :fnot1d fdrs1,fdrd is opf = 0x6a & op3 = 0x36 & op = 0x2 & fdrs1 & fdrd { fdrd = fnot1d(fdrs1); } define pcodeop fnot1s; :fnot1s fdrs1,fdrd is opf = 0x6b & op3 = 0x36 & op = 0x2 & fdrs1 & fdrd { fdrd = fnot1s(fdrs1); } define pcodeop fnot2d; :fnot2d fdrs2,fdrd is opf = 0x66 & op3 = 0x36 & op = 0x2 & fdrs2 & fdrd { fdrd = fnot2d(fdrs2); } define pcodeop fnot2s; :fnot2s fdrs2,fdrd is opf = 0x67 & op3 = 0x36 & op = 0x2 & fdrs2 & fdrd { fdrd = fnot2s(fdrs2); } define pcodeop foned; :foned fdrd is opf = 0x7e & op3 = 0x36 & op = 0x2 & fdrd { fdrd = foned(); } define pcodeop fones; :fones fsrd is opf = 0x7f & op3 = 0x36 & op = 0x2 & fsrd { fsrd = fones(); } define pcodeop ford; :ford fdrs1,fdrs2,fdrd is opf = 0x7c & op3 = 0x36 & op = 0x2 & fdrs1 & fdrs2 & fdrd { fdrd = ford(fdrs1,fdrs2); } define pcodeop fornot1d; :fornot1d fdrs1,fdrs2,fdrd is opf = 0x7a & op3 = 0x36 & op = 0x2 & fdrs1 & fdrs2 & fdrd { fdrd = fornot1d(fdrs1,fdrs2); } define pcodeop fornot1s; :fornot1s fdrs1,fdrs2,fdrd is opf = 0x7b & op3 = 0x36 & op = 0x2 & fdrs1 & fdrs2 & fdrd { fdrd = fornot1s(fdrs1,fdrs2); } define pcodeop fornot2d; :fornot2d fdrs1,fdrs2,fdrd is opf = 0x76 & op3 = 0x36 & op = 0x2 & fdrs1 & fdrs2 & fdrd { fdrd = fornot2d(fdrs1,fdrs2); } define pcodeop fornot2s; :fornot2s fdrs1,fdrs2,fdrd is opf = 0x77 & op3 = 0x36 & op = 0x2 & fdrs1 & fdrs2 & fdrd { fdrd = fornot2s(fdrs1,fdrs2); } define pcodeop fors; :fors fdrs1,fdrs2,fdrd is opf = 0x7d & op3 = 0x36 & op = 0x2 & fdrs1 & fdrs2 & fdrd { fdrd = fors(fdrs1,fdrs2); } define pcodeop fpack16; :fpack16 fdrs2,fsrd is opf = 0x3b & op3=0x36 & op = 0x2 & fdrs2 & fsrd { fsrd = fpack16(fdrs2); } define pcodeop fpack32; :fpack32 fdrs1,fdrs2,fdrd is opf = 0x3a & op3 = 0x36 & op = 0x2 & fdrs1 & fdrs2 & fdrd { fdrd = fpack32(fdrs1,fdrs2); } define pcodeop fpackfix; :fpackfix fdrs2,fsrd is opf = 0x3d & op3 = 0x36 & op = 0x2 & fdrs2 & fsrd { fsrd = fpackfix(fdrs2); } define pcodeop fpadd16; :fpadd16 fdrs1,fdrs2,fdrd is opf = 0x50 & op3 = 0x36 & op = 0x2 & fdrs1 & fdrs2 & fdrd { fdrd = fpadd16(fdrs1,fdrs2); } define pcodeop fpadd16s; :fpadd16s fdrs1,fdrs2,fdrd is opf = 0x51 & op3 = 0x36 & op = 0x2 & fdrs1 & fdrs2 & fdrd { fdrd = fpadd16s(fdrs1,fdrs2); } define pcodeop fpadd32; :fpadd32 fdrs1,fdrs2,fdrd is opf = 0x52 & op3 = 0x36 & op = 0x2 & fdrs1 & fdrs2 & fdrd { fdrd = fpadd32(fdrs1,fdrs2); } define pcodeop fpadd32s; :fpadd32s fdrs1,fdrs2,fdrd is opf = 0x53 & op3 = 0x36 & op = 0x2 & fdrs1 & fdrs2 & fdrd { fdrd = fpadd32s(fdrs1,fdrs2); } define pcodeop fpcmpeq16; :fpcmpeq16 fdrs1,fdrs2,rd is opf = 0x2a & op3 = 0x36 & op = 0x2 & fdrs1 & fdrs2 & rd { rd = fpcmpeq16(fdrs1,fdrs2); } define pcodeop fpcmpeq32; :fpcmpeq32 fdrs1,fdrs2,rd is opf = 0x2e & op3 = 0x36 & op = 0x2 & fdrs1 & fdrs2 & rd { rd = fpcmpeq32(fdrs1,fdrs2); } define pcodeop fpcmpgt16; :fpcmpgt16 fdrs1,fdrs2,rd is opf = 0x28 & op3 = 0x36 & op = 0x2 & fdrs1 & fdrs2 & rd { rd = fpcmpgt16(fdrs1,fdrs2); } define pcodeop fpcmpgt32; :fpcmpgt32 fdrs1,fdrs2,rd is opf = 0x2c & op3 = 0x36 & op = 0x2 & fdrs1 & fdrs2 & rd { rd = fpcmpgt32(fdrs1,fdrs2); } define pcodeop fpcmple16; :fpcmple16 fdrs1,fdrs2,rd is opf = 0x20 & op3 = 0x36 & op = 0x2 & fdrs1 & fdrs2 & rd { rd = fpcmple16(fdrs1,fdrs2); } define pcodeop fpcmple32; :fpcmple32 fdrs1,fdrs2,rd is opf = 0x24 & op3 = 0x36 & op = 0x2 & fdrs1 & fdrs2 & rd { rd = fpcmple32(fdrs1,fdrs2); } define pcodeop fpcmpne16; :fpcmpne16 fdrs1,fdrs2,rd is opf = 0x22 & op3 = 0x36 & op = 0x2 & fdrs1 & fdrs2 & rd { rd = fpcmpne16(fdrs1,fdrs2); } define pcodeop fpcmpne32; :fpcmpne32 fdrs1,fdrs2,rd is opf = 0x26 & op3 = 0x36 & op = 0x2 & fdrs1 & fdrs2 & rd { rd = fpcmpne32(fdrs1,fdrs2); } define pcodeop fpmerge; :fpmerge fdrs1,fdrs2,fdrd is opf = 0x4b & op3 = 0x36 & op = 0x2 & fdrs1 & fdrs2 & fdrd { fdrd = fpmerge(fdrs1,fdrs2); } define pcodeop fpsub16; :fpsub16 fdrs1,fdrs2,fdrd is opf = 0x54 & op3 = 0x36 & op = 0x2 & fdrs1 & fdrs2 & fdrd { fdrd = fpsub16(fdrs1,fdrs2); } define pcodeop fpsub16s; :fpsub16s fdrs1,fdrs2,fdrd is opf = 0x55 & op3 = 0x36 & op = 0x2 & fdrs1 & fdrs2 & fdrd { fdrd = fpsub16s(fdrs1,fdrs2); } define pcodeop fpsub32; :fpsub32 fdrs1,fdrs2,fdrd is opf = 0x56 & op3 = 0x36 & op = 0x2 & fdrs1 & fdrs2 & fdrd { fdrd = fpsub32(fdrs1,fdrs2); } define pcodeop fpsub32s; :fpsub32s fdrs1,fdrs2,fdrd is opf = 0x57 & op3 = 0x36 & op = 0x2 & fdrs1 & fdrs2 & fdrd { fdrd = fpsub32s(fdrs1,fdrs2); } define pcodeop fsrc1d; :fsrc1d fdrs1,fdrd is opf = 0x74 & op3 = 0x36 & op = 0x2 & fdrs1 & fdrd { fdrd = fsrc1d(fdrs1); } define pcodeop fsrc1s; :fsrc1s fdrs1,fdrd is opf = 0x75 & op3 = 0x36 & op = 0x2 & fdrs1 & fdrd { fdrd = fsrc1s(fdrs1); } define pcodeop fsrc2d; :fsrc2d fdrs2,fdrd is opf = 0x78 & op3 = 0x36 & op = 0x2 & fdrs2 & fdrd { fdrd = fsrc2d(fdrs2); } define pcodeop fsrc2s; :fsrc2s fdrs2,fdrd is opf = 0x79 & op3 = 0x36 & op = 0x2 & fdrs2 & fdrd { fdrd = fsrc2s(fdrs2); } define pcodeop fxnord; :fxnord fdrs1,fdrs2,fdrd is opf = 0x72 & op3 = 0x36 & op = 0x2 & fdrs1 & fdrs2 & fdrd { fdrd = fxnord(fdrs1,fdrs2); } define pcodeop fxnors; :fxnors fdrs1,fdrs2,fdrd is opf = 0x73 & op3 = 0x36 & op = 0x2 & fdrs1 & fdrs2 & fdrd { fdrd = fxnors(fdrs1,fdrs2); } define pcodeop fxord; :fxord fdrs1,fdrs2,fdrd is opf = 0x6c & op3 = 0x36 & op = 0x2 & fdrs1 & fdrs2 & fdrd { fdrd = fxord(fdrs1,fdrs2); } define pcodeop fxors; :fxors fdrs1,fdrs2,fdrd is opf = 0x6d & op3 = 0x36 & op = 0x2 & fdrs1 & fdrs2 & fdrd { fdrd = fxors(fdrs1,fdrs2); } define pcodeop fzerod; :fzerod fdrd is opf = 0x60 & op3 = 0x36 & op = 0x2 & fdrd { fdrd = fzerod(); } define pcodeop fzeros; :fzeros fsrd is opf = 0x61 & op3 = 0x36 & op = 0x2 & fsrd { fsrd = fzeros(); } define pcodeop pdist; :pdist fdrs1,fdrs2,fdrd is opf = 0x3e & op3 = 0x36 & op = 0x2 & fdrs1 & fdrs2 & fdrd { fdrd = pdist(fdrs1,fdrs2); }