[llvm-dev] [TableGen] What to do if there are overlapping instruction patterns?
Charlotte Delenk via llvm-dev
llvm-dev at lists.llvm.org
Tue Aug 25 03:19:26 PDT 2020
On 8/25/20 11:00 AM, Charlotte Delenk via llvm-dev wrote:
> I've been working on adding support for a (semi-proprietary) extension
> for PowerPC called "Paired-Singles". It's a SIMD instruction set
> supporting various operations on a vector of 2 32-bit floating point
> numbers.
>
> The Extension is found in the PowerPC 750CL, modified variants of it
> are used in the Nintendo GameCube (Gekko), the Nintendo Wii (Broadway)
> and the Nintendo Wii U (Espresso)
>
> It's been going pretty well so far, however the biggest hurdle I have
> encountered was that the testsuite is failing because the instruction
> space for Paired Singles has been reused for ISA 3.1 and VMX.
>
> Is there a way to disembiguate them further? You can see my current
> patch at https://reviews.llvm.org/D85137 and it already prevents you
> from enabling Altivec and Paired Singles at the same time.
>
>
I should have added the decoding conflicts output generated by the build
step of PPCGenDisassemblerTables.inc in my previous email. Most
worrisome is is the psq_st entry as that conflicts with over a hundred
entries, however this is the immediate-offset store instruction for
paired singles which makes it quite important
-------------- next part --------------
Decoding Conflict:
000100...................0001100
000100....................001100
000100..........................
................................
PSQ_LX 000100___________________0001100
VGBBD 000100_____00000_____10100001100
VMRGEW 000100_______________11110001100
VMRGHB 000100_______________00000001100
VMRGHW 000100_______________00010001100
VMRGLB 000100_______________00100001100
VMRGLW 000100_______________00110001100
VMRGOW 000100_______________11010001100
VSLO 000100_______________10000001100
VSPLTB 000100_______________01000001100
VSPLTISB 000100__________0000001100001100
VSPLTISW 000100__________0000001110001100
VSPLTW 000100_______________01010001100
Decoding Conflict:
000100....................010111
000100..........................
................................
PS_SUM1_rec 000100____________________010111
VMSUMCUD 000100____________________010111
Decoding Conflict:
000100....................011100
000100..........................
................................
PS_MADDS0 000100____________________011100
VEXTDUWVLX 000100____________________011100
Decoding Conflict:
000100....................011101
000100..........................
................................
PS_MADDS0_rec 000100____________________011101
VEXTDUWVRX 000100____________________011101
Decoding Conflict:
000100....................011110
000100..........................
................................
PS_MADDS1 000100____________________011110
VEXTDDVLX 000100____________________011110
Decoding Conflict:
000100....................011111
000100..........................
................................
PS_MADDS1_rec 000100____________________011111
VEXTDDVRX 000100____________________011111
Decoding Conflict:
000100....................101110
000100..........................
................................
PS_SEL 000100____________________101110
VMADDFP 000100____________________101110
Decoding Conflict:
000100....................101111
000100..........................
................................
PS_SEL_rec 000100____________________101111
VNMSUBFP 000100____________________101111
Decoding Conflict:
000100.....00000.....00000110000
000100...............00000110000
000100....................110000
000100..........................
................................
PS_RES 000100_____00000_____00000110000
PS_RSQRTE 000100_____00000_____00000110000
Decoding Conflict:
000100.....00000.....00000110001
000100...............00000110001
000100....................110001
000100..........................
................................
PS_RES_rec 000100_____00000_____00000110001
PS_RSQRTE_rec 000100_____00000_____00000110001
Decoding Conflict:
000100....................111011
000100..........................
................................
PS_MADD_rec 000100____________________111011
VPERMR 000100____________________111011
Decoding Conflict:
000100....................111100
000100..........................
................................
PS_NMSUB 000100____________________111100
VADDEUQM 000100____________________111100
Decoding Conflict:
000100....................111101
000100..........................
................................
PS_NMSUB_rec 000100____________________111101
VADDECUQ 000100____________________111101
Decoding Conflict:
000100....................111110
000100..........................
................................
PS_NMADD 000100____________________111110
VSUBEUQM 000100____________________111110
Decoding Conflict:
000100....................111111
000100..........................
................................
PS_NMADD_rec 000100____________________111111
VSUBECUQ 000100____________________111111
Decoding Conflict:
111100..._______................
111100..........................
................................
PSQ_ST 111100__________________________
XSABSDP 111100_____00000_____101011001__
XSADDDP 111100_______________00100000___
XSADDSP 111100_______________00000000___
XSCMPEQDP 111100_______________00000011___
XSCMPEXPDP 111100___00__________00111011__0
XSCMPGEDP 111100_______________00010011___
XSCMPGTDP 111100_______________00001011___
XSCMPODP 111100___00__________00101011__0
XSCMPUDP 111100___00__________00100011__0
XSCPSGNDP 111100_______________10110000___
XSCVDPHP 111100_____10001_____101011011__
XSCVDPSP 111100_____00000_____100001001__
XSCVDPSPN 111100_____00000_____100001011__
XSCVDPSXDS 111100_____00000_____101011000__
XSCVDPSXWS 111100_____00000_____001011000__
XSCVDPUXDS 111100_____00000_____101001000__
XSCVDPUXWS 111100_____00000_____001001000__
XSCVHPDP 111100_____10000_____101011011__
XSCVSPDP 111100_____00000_____101001001__
XSCVSPDPN 111100_____00000_____101001011__
XSCVSXDDP 111100_____00000_____101111000__
XSCVSXDSP 111100_____00000_____100111000__
XSCVUXDDP 111100_____00000_____101101000__
XSCVUXDSP 111100_____00000_____100101000__
XSDIVDP 111100_______________00111000___
XSDIVSP 111100_______________00011000___
XSIEXPDP 111100_______________1110010110_
XSMADDADP 111100_______________00100001___
XSMADDASP 111100_______________00000001___
XSMADDMDP 111100_______________00101001___
XSMADDMSP 111100_______________00001001___
XSMAXCDP 111100_______________10000000___
XSMAXDP 111100_______________10100000___
XSMAXJDP 111100_______________10010000___
XSMINCDP 111100_______________10001000___
XSMINDP 111100_______________10101000___
XSMINJDP 111100_______________10011000___
XSMSUBADP 111100_______________00110001___
XSMSUBASP 111100_______________00010001___
XSMSUBMDP 111100_______________00111001___
XSMSUBMSP 111100_______________00011001___
XSMULDP 111100_______________00110000___
XSMULSP 111100_______________00010000___
XSNABSDP 111100_____00000_____101101001__
XSNEGDP 111100_____00000_____101111001__
XSNMADDADP 111100_______________10100001___
XSNMADDASP 111100_______________10000001___
XSNMADDMDP 111100_______________10101001___
XSNMADDMSP 111100_______________10001001___
XSNMSUBADP 111100_______________10110001___
XSNMSUBASP 111100_______________10010001___
XSNMSUBMDP 111100_______________10111001___
XSNMSUBMSP 111100_______________10011001___
XSRDPI 111100_____00000_____001001001__
XSRDPIC 111100_____00000_____001101011__
XSRDPIM 111100_____00000_____001111001__
XSRDPIP 111100_____00000_____001101001__
XSRDPIZ 111100_____00000_____001011001__
XSREDP 111100_____00000_____001011010__
XSRESP 111100_____00000_____000011010__
XSRSP 111100_____00000_____100011001__
XSRSQRTEDP 111100_____00000_____001001010__
XSRSQRTESP 111100_____00000_____000001010__
XSSQRTDP 111100_____00000_____001001011__
XSSQRTSP 111100_____00000_____000001011__
XSSUBDP 111100_______________00101000___
XSSUBSP 111100_______________00001000___
XSTDIVDP 111100___00__________00111101__0
XSTSTDCDP 111100_______________101101010_0
XSTSTDCSP 111100_______________100101010_0
XSXEXPDP 111100_____00000_____101011011_0
XSXSIGDP 111100_____00001_____101011011_0
XVABSDP 111100_____00000_____111011001__
XVABSSP 111100_____00000_____110011001__
XVADDDP 111100_______________01100000___
XVADDSP 111100_______________01000000___
XVCMPEQDP 111100_______________01100011___
XVCMPEQDP_rec 111100_______________11100011___
XVCMPEQSP 111100_______________01000011___
XVCMPEQSP_rec 111100_______________11000011___
XVCMPGEDP 111100_______________01110011___
XVCMPGEDP_rec 111100_______________11110011___
XVCMPGESP 111100_______________01010011___
XVCMPGESP_rec 111100_______________11010011___
XVCMPGTDP 111100_______________01101011___
XVCMPGTDP_rec 111100_______________11101011___
XVCMPGTSP 111100_______________01001011___
XVCMPGTSP_rec 111100_______________11001011___
XVCPSGNDP 111100_______________11110000___
XVCPSGNSP 111100_______________11010000___
XVCVDPSP 111100_____00000_____110001001__
XVCVDPSXDS 111100_____00000_____111011000__
XVCVDPSXWS 111100_____00000_____011011000__
XVCVDPUXDS 111100_____00000_____111001000__
XVCVDPUXWS 111100_____00000_____011001000__
XVCVHPSP 111100_____11000_____111011011__
XVCVSPDP 111100_____00000_____111001001__
XVCVSPHP 111100_____11001_____111011011__
XVCVSPSXDS 111100_____00000_____110011000__
XVCVSPSXWS 111100_____00000_____010011000__
XVCVSPUXDS 111100_____00000_____110001000__
XVCVSPUXWS 111100_____00000_____010001000__
XVCVSXDDP 111100_____00000_____111111000__
XVCVSXDSP 111100_____00000_____110111000__
XVCVSXWDP 111100_____00000_____011111000__
XVCVSXWSP 111100_____00000_____010111000__
XVCVUXDDP 111100_____00000_____111101000__
XVCVUXDSP 111100_____00000_____110101000__
XVCVUXWDP 111100_____00000_____011101000__
XVCVUXWSP 111100_____00000_____010101000__
XVDIVDP 111100_______________01111000___
XVDIVSP 111100_______________01011000___
XVIEXPDP 111100_______________11111000___
XVIEXPSP 111100_______________11011000___
XVMADDADP 111100_______________01100001___
XVMADDASP 111100_______________01000001___
XVMADDMDP 111100_______________01101001___
XVMADDMSP 111100_______________01001001___
XVMAXDP 111100_______________11100000___
XVMAXSP 111100_______________11000000___
XVMINDP 111100_______________11101000___
XVMINSP 111100_______________11001000___
XVMSUBADP 111100_______________01110001___
XVMSUBASP 111100_______________01010001___
XVMSUBMDP 111100_______________01111001___
XVMSUBMSP 111100_______________01011001___
XVMULDP 111100_______________01110000___
XVMULSP 111100_______________01010000___
XVNABSDP 111100_____00000_____111101001__
XVNABSSP 111100_____00000_____110101001__
XVNEGDP 111100_____00000_____111111001__
XVNEGSP 111100_____00000_____110111001__
XVNMADDADP 111100_______________11100001___
XVNMADDASP 111100_______________11000001___
XVNMADDMDP 111100_______________11101001___
XVNMADDMSP 111100_______________11001001___
XVNMSUBADP 111100_______________11110001___
XVNMSUBASP 111100_______________11010001___
XVNMSUBMDP 111100_______________11111001___
XVNMSUBMSP 111100_______________11011001___
XVRDPI 111100_____00000_____011001001__
XVRDPIC 111100_____00000_____011101011__
XVRDPIM 111100_____00000_____011111001__
XVRDPIP 111100_____00000_____011101001__
XVRDPIZ 111100_____00000_____011011001__
XVREDP 111100_____00000_____011011010__
XVRESP 111100_____00000_____010011010__
XVRSPI 111100_____00000_____010001001__
XVRSPIC 111100_____00000_____010101011__
XVRSPIM 111100_____00000_____010111001__
XVRSPIP 111100_____00000_____010101001__
XVRSPIZ 111100_____00000_____010011001__
XVRSQRTEDP 111100_____00000_____011001010__
XVRSQRTESP 111100_____00000_____010001010__
XVSQRTDP 111100_____00000_____011001011__
XVSQRTSP 111100_____00000_____010001011__
XVSUBDP 111100_______________01101000___
XVSUBSP 111100_______________01001000___
XVTDIVDP 111100___00__________01111101__0
XVTDIVSP 111100___00__________01011101__0
XVTSTDCDP 111100_______________1111_101___
XVTSTDCSP 111100_______________1101_101___
XVXEXPDP 111100_____00000_____111011011__
XVXEXPSP 111100_____01000_____111011011__
XVXSIGDP 111100_____00001_____111011011__
XVXSIGSP 111100_____01001_____111011011__
XXBRD 111100_____10111_____111011011__
XXBRH 111100_____00111_____111011011__
XXBRQ 111100_____11111_____111011011__
XXBRW 111100_____01111_____111011011__
XXEXTRACTUW 111100_______________010100101__
XXGENPCVBM 111100_______________1110010100_
XXGENPCVDM 111100_______________1110110101_
XXGENPCVHM 111100_______________1110010101_
XXGENPCVWM 111100_______________1110110100_
XXINSERTW 111100_______________010110101__
XXLAND 111100_______________10000010___
XXLANDC 111100_______________10001010___
XXLEQV 111100_______________10111010___
XXLNAND 111100_______________10110010___
XXLNOR 111100_______________10100010___
XXLOR 111100_______________10010010___
XXLORC 111100_______________10101010___
XXLXOR 111100_______________10011010___
XXMRGHW 111100_______________00010010___
XXMRGLW 111100_______________00110010___
XXPERM 111100_______________00011010___
XXPERMDI 111100_______________0__01010___
XXPERMR 111100_______________00111010___
XXSEL 111100____________________11____
XXSLDWI 111100_______________0__00010___
XXSPLTIB 111100_____00________0101101000_
XXSPLTW 111100_____000_______010100100__
More information about the llvm-dev
mailing list