|
17 | 17 | let Predicates = [HasBasicD] in {
|
18 | 18 |
|
19 | 19 | // Arithmetic Operation Instructions
|
20 |
| -def FADD_D : FP_ALU_3R<0b00000001000000010, FPR64>; |
21 |
| -def FSUB_D : FP_ALU_3R<0b00000001000000110, FPR64>; |
22 |
| -def FMUL_D : FP_ALU_3R<0b00000001000001010, FPR64>; |
23 |
| -def FDIV_D : FP_ALU_3R<0b00000001000001110, FPR64>; |
24 |
| -def FMADD_D : FP_ALU_4R<0b000010000010, FPR64>; |
25 |
| -def FMSUB_D : FP_ALU_4R<0b000010000110, FPR64>; |
26 |
| -def FNMADD_D : FP_ALU_4R<0b000010001010, FPR64>; |
27 |
| -def FNMSUB_D : FP_ALU_4R<0b000010001110, FPR64>; |
28 |
| -def FMAX_D : FP_ALU_3R<0b00000001000010010, FPR64>; |
29 |
| -def FMIN_D : FP_ALU_3R<0b00000001000010110, FPR64>; |
30 |
| -def FMAXA_D : FP_ALU_3R<0b00000001000011010, FPR64>; |
31 |
| -def FMINA_D : FP_ALU_3R<0b00000001000011110, FPR64>; |
32 |
| -def FABS_D : FP_ALU_2R<0b0000000100010100000010, FPR64>; |
33 |
| -def FNEG_D : FP_ALU_2R<0b0000000100010100000110, FPR64>; |
34 |
| -def FSQRT_D : FP_ALU_2R<0b0000000100010100010010, FPR64>; |
35 |
| -def FRECIP_D : FP_ALU_2R<0b0000000100010100010110, FPR64>; |
36 |
| -def FRSQRT_D : FP_ALU_2R<0b0000000100010100011010, FPR64>; |
37 |
| -def FSCALEB_D : FP_ALU_3R<0b00000001000100010, FPR64>; |
38 |
| -def FLOGB_D : FP_ALU_2R<0b0000000100010100001010, FPR64>; |
39 |
| -def FCOPYSIGN_D : FP_ALU_3R<0b00000001000100110, FPR64>; |
40 |
| -def FCLASS_D : FP_ALU_2R<0b0000000100010100001110, FPR64>; |
| 20 | +def FADD_D : FP_ALU_3R<0x01010000, FPR64>; |
| 21 | +def FSUB_D : FP_ALU_3R<0x01030000, FPR64>; |
| 22 | +def FMUL_D : FP_ALU_3R<0x01050000, FPR64>; |
| 23 | +def FDIV_D : FP_ALU_3R<0x01070000, FPR64>; |
| 24 | +def FMADD_D : FP_ALU_4R<0x08200000, FPR64>; |
| 25 | +def FMSUB_D : FP_ALU_4R<0x08600000, FPR64>; |
| 26 | +def FNMADD_D : FP_ALU_4R<0x08a00000, FPR64>; |
| 27 | +def FNMSUB_D : FP_ALU_4R<0x08e00000, FPR64>; |
| 28 | +def FMAX_D : FP_ALU_3R<0x01090000, FPR64>; |
| 29 | +def FMIN_D : FP_ALU_3R<0x010b0000, FPR64>; |
| 30 | +def FMAXA_D : FP_ALU_3R<0x010d0000, FPR64>; |
| 31 | +def FMINA_D : FP_ALU_3R<0x010f0000, FPR64>; |
| 32 | +def FABS_D : FP_ALU_2R<0x01140800, FPR64>; |
| 33 | +def FNEG_D : FP_ALU_2R<0x01141800, FPR64>; |
| 34 | +def FSQRT_D : FP_ALU_2R<0x01144800, FPR64>; |
| 35 | +def FRECIP_D : FP_ALU_2R<0x01145800, FPR64>; |
| 36 | +def FRSQRT_D : FP_ALU_2R<0x01146800, FPR64>; |
| 37 | +def FSCALEB_D : FP_ALU_3R<0x01110000, FPR64>; |
| 38 | +def FLOGB_D : FP_ALU_2R<0x01142800, FPR64>; |
| 39 | +def FCOPYSIGN_D : FP_ALU_3R<0x01130000, FPR64>; |
| 40 | +def FCLASS_D : FP_ALU_2R<0x01143800, FPR64>; |
41 | 41 |
|
42 | 42 | // Comparison Instructions
|
43 |
| -def FCMP_CAF_D : FP_CMP<FPCMP_OPC_D, FPCMP_COND_CAF, FPR64>; |
44 |
| -def FCMP_CUN_D : FP_CMP<FPCMP_OPC_D, FPCMP_COND_CUN, FPR64>; |
45 |
| -def FCMP_CEQ_D : FP_CMP<FPCMP_OPC_D, FPCMP_COND_CEQ, FPR64>; |
46 |
| -def FCMP_CUEQ_D : FP_CMP<FPCMP_OPC_D, FPCMP_COND_CUEQ, FPR64>; |
47 |
| -def FCMP_CLT_D : FP_CMP<FPCMP_OPC_D, FPCMP_COND_CLT, FPR64>; |
48 |
| -def FCMP_CULT_D : FP_CMP<FPCMP_OPC_D, FPCMP_COND_CULT, FPR64>; |
49 |
| -def FCMP_CLE_D : FP_CMP<FPCMP_OPC_D, FPCMP_COND_CLE, FPR64>; |
50 |
| -def FCMP_CULE_D : FP_CMP<FPCMP_OPC_D, FPCMP_COND_CULE, FPR64>; |
51 |
| -def FCMP_CNE_D : FP_CMP<FPCMP_OPC_D, FPCMP_COND_CNE, FPR64>; |
52 |
| -def FCMP_COR_D : FP_CMP<FPCMP_OPC_D, FPCMP_COND_COR, FPR64>; |
53 |
| -def FCMP_CUNE_D : FP_CMP<FPCMP_OPC_D, FPCMP_COND_CUNE, FPR64>; |
54 |
| -def FCMP_SAF_D : FP_CMP<FPCMP_OPC_D, FPCMP_COND_SAF, FPR64>; |
55 |
| -def FCMP_SUN_D : FP_CMP<FPCMP_OPC_D, FPCMP_COND_SUN, FPR64>; |
56 |
| -def FCMP_SEQ_D : FP_CMP<FPCMP_OPC_D, FPCMP_COND_SEQ, FPR64>; |
57 |
| -def FCMP_SUEQ_D : FP_CMP<FPCMP_OPC_D, FPCMP_COND_SUEQ, FPR64>; |
58 |
| -def FCMP_SLT_D : FP_CMP<FPCMP_OPC_D, FPCMP_COND_SLT, FPR64>; |
59 |
| -def FCMP_SULT_D : FP_CMP<FPCMP_OPC_D, FPCMP_COND_SULT, FPR64>; |
60 |
| -def FCMP_SLE_D : FP_CMP<FPCMP_OPC_D, FPCMP_COND_SLE, FPR64>; |
61 |
| -def FCMP_SULE_D : FP_CMP<FPCMP_OPC_D, FPCMP_COND_SULE, FPR64>; |
62 |
| -def FCMP_SNE_D : FP_CMP<FPCMP_OPC_D, FPCMP_COND_SNE, FPR64>; |
63 |
| -def FCMP_SOR_D : FP_CMP<FPCMP_OPC_D, FPCMP_COND_SOR, FPR64>; |
64 |
| -def FCMP_SUNE_D : FP_CMP<FPCMP_OPC_D, FPCMP_COND_SUNE, FPR64>; |
| 43 | +def FCMP_CAF_D : FP_CMP<0x0c200000, FPR64>; |
| 44 | +def FCMP_CUN_D : FP_CMP<0x0c240000, FPR64>; |
| 45 | +def FCMP_CEQ_D : FP_CMP<0x0c220000, FPR64>; |
| 46 | +def FCMP_CUEQ_D : FP_CMP<0x0c260000, FPR64>; |
| 47 | +def FCMP_CLT_D : FP_CMP<0x0c210000, FPR64>; |
| 48 | +def FCMP_CULT_D : FP_CMP<0x0c250000, FPR64>; |
| 49 | +def FCMP_CLE_D : FP_CMP<0x0c230000, FPR64>; |
| 50 | +def FCMP_CULE_D : FP_CMP<0x0c270000, FPR64>; |
| 51 | +def FCMP_CNE_D : FP_CMP<0x0c280000, FPR64>; |
| 52 | +def FCMP_COR_D : FP_CMP<0x0c2a0000, FPR64>; |
| 53 | +def FCMP_CUNE_D : FP_CMP<0x0c2c0000, FPR64>; |
| 54 | +def FCMP_SAF_D : FP_CMP<0x0c208000, FPR64>; |
| 55 | +def FCMP_SUN_D : FP_CMP<0x0c248000, FPR64>; |
| 56 | +def FCMP_SEQ_D : FP_CMP<0x0c228000, FPR64>; |
| 57 | +def FCMP_SUEQ_D : FP_CMP<0x0c268000, FPR64>; |
| 58 | +def FCMP_SLT_D : FP_CMP<0x0c218000, FPR64>; |
| 59 | +def FCMP_SULT_D : FP_CMP<0x0c258000, FPR64>; |
| 60 | +def FCMP_SLE_D : FP_CMP<0x0c238000, FPR64>; |
| 61 | +def FCMP_SULE_D : FP_CMP<0x0c278000, FPR64>; |
| 62 | +def FCMP_SNE_D : FP_CMP<0x0c288000, FPR64>; |
| 63 | +def FCMP_SOR_D : FP_CMP<0x0c2a8000, FPR64>; |
| 64 | +def FCMP_SUNE_D : FP_CMP<0x0c2c8000, FPR64>; |
65 | 65 |
|
66 | 66 | // Conversion Instructions
|
67 |
| -def FFINT_S_L : FP_CONV<0b0000000100011101000110, FPR32, FPR64>; |
68 |
| -def FTINT_L_S : FP_CONV<0b0000000100011011001001, FPR64, FPR32>; |
69 |
| -def FTINTRM_L_S : FP_CONV<0b0000000100011010001001, FPR64, FPR32>; |
70 |
| -def FTINTRP_L_S : FP_CONV<0b0000000100011010011001, FPR64, FPR32>; |
71 |
| -def FTINTRZ_L_S : FP_CONV<0b0000000100011010101001, FPR64, FPR32>; |
72 |
| -def FTINTRNE_L_S : FP_CONV<0b0000000100011010111001, FPR64, FPR32>; |
73 |
| -def FCVT_S_D : FP_CONV<0b0000000100011001000110, FPR32, FPR64>; |
74 |
| -def FCVT_D_S : FP_CONV<0b0000000100011001001001, FPR64, FPR32>; |
75 |
| -def FFINT_D_W : FP_CONV<0b0000000100011101001000, FPR64, FPR32>; |
76 |
| -def FFINT_D_L : FP_CONV<0b0000000100011101001010, FPR64, FPR64>; |
77 |
| -def FTINT_W_D : FP_CONV<0b0000000100011011000010, FPR32, FPR64>; |
78 |
| -def FTINT_L_D : FP_CONV<0b0000000100011011001010, FPR64, FPR64>; |
79 |
| -def FTINTRM_W_D : FP_CONV<0b0000000100011010000010, FPR32, FPR64>; |
80 |
| -def FTINTRM_L_D : FP_CONV<0b0000000100011010001010, FPR64, FPR64>; |
81 |
| -def FTINTRP_W_D : FP_CONV<0b0000000100011010010010, FPR32, FPR64>; |
82 |
| -def FTINTRP_L_D : FP_CONV<0b0000000100011010011010, FPR64, FPR64>; |
83 |
| -def FTINTRZ_W_D : FP_CONV<0b0000000100011010100010, FPR32, FPR64>; |
84 |
| -def FTINTRZ_L_D : FP_CONV<0b0000000100011010101010, FPR64, FPR64>; |
85 |
| -def FTINTRNE_W_D : FP_CONV<0b0000000100011010110010, FPR32, FPR64>; |
86 |
| -def FTINTRNE_L_D : FP_CONV<0b0000000100011010111010, FPR64, FPR64>; |
87 |
| -def FRINT_D : FP_CONV<0b0000000100011110010010, FPR64, FPR64>; |
| 67 | +def FFINT_S_L : FP_CONV<0x011d1800, FPR32, FPR64>; |
| 68 | +def FTINT_L_S : FP_CONV<0x011b2400, FPR64, FPR32>; |
| 69 | +def FTINTRM_L_S : FP_CONV<0x011a2400, FPR64, FPR32>; |
| 70 | +def FTINTRP_L_S : FP_CONV<0x011a6400, FPR64, FPR32>; |
| 71 | +def FTINTRZ_L_S : FP_CONV<0x011aa400, FPR64, FPR32>; |
| 72 | +def FTINTRNE_L_S : FP_CONV<0x011ae400, FPR64, FPR32>; |
| 73 | +def FCVT_S_D : FP_CONV<0x01191800, FPR32, FPR64>; |
| 74 | +def FCVT_D_S : FP_CONV<0x01192400, FPR64, FPR32>; |
| 75 | +def FFINT_D_W : FP_CONV<0x011d2000, FPR64, FPR32>; |
| 76 | +def FFINT_D_L : FP_CONV<0x011d2800, FPR64, FPR64>; |
| 77 | +def FTINT_W_D : FP_CONV<0x011b0800, FPR32, FPR64>; |
| 78 | +def FTINT_L_D : FP_CONV<0x011b2800, FPR64, FPR64>; |
| 79 | +def FTINTRM_W_D : FP_CONV<0x011a0800, FPR32, FPR64>; |
| 80 | +def FTINTRM_L_D : FP_CONV<0x011a2800, FPR64, FPR64>; |
| 81 | +def FTINTRP_W_D : FP_CONV<0x011a4800, FPR32, FPR64>; |
| 82 | +def FTINTRP_L_D : FP_CONV<0x011a6800, FPR64, FPR64>; |
| 83 | +def FTINTRZ_W_D : FP_CONV<0x011a8800, FPR32, FPR64>; |
| 84 | +def FTINTRZ_L_D : FP_CONV<0x011aa800, FPR64, FPR64>; |
| 85 | +def FTINTRNE_W_D : FP_CONV<0x011ac800, FPR32, FPR64>; |
| 86 | +def FTINTRNE_L_D : FP_CONV<0x011ae800, FPR64, FPR64>; |
| 87 | +def FRINT_D : FP_CONV<0x011e4800, FPR64, FPR64>; |
88 | 88 |
|
89 | 89 | // Move Instructions
|
90 |
| -def FMOV_D : FP_MOV<0b0000000100010100100110, FPR64, FPR64>; |
91 |
| -def MOVFRH2GR_S : FP_MOV<0b0000000100010100101111, GPR, FPR64>; |
| 90 | +def FMOV_D : FP_MOV<0x01149800, FPR64, FPR64>; |
| 91 | +def MOVFRH2GR_S : FP_MOV<0x0114bc00, GPR, FPR64>; |
92 | 92 | let isCodeGenOnly = 1 in {
|
93 |
| -def MOVFR2GR_S_64 : FP_MOV<0b0000000100010100101101, GPR, FPR64>; |
94 |
| -def FSEL_xD : FP_SEL<0b00001101000000, FPR64>; |
| 93 | +def MOVFR2GR_S_64 : FP_MOV<0x0114b400, GPR, FPR64>; |
| 94 | +def FSEL_xD : FP_SEL<0x0d000000, FPR64>; |
95 | 95 | } // isCodeGenOnly = 1
|
96 | 96 | let hasSideEffects = 0, mayLoad = 0, mayStore = 0, Constraints = "$dst = $out" in {
|
97 |
| -def MOVGR2FRH_W : FPFmtMOV<0b0000000100010100101011, (outs FPR64:$out), |
| 97 | +def MOVGR2FRH_W : FPFmtMOV<0x0114ac00, (outs FPR64:$out), |
98 | 98 | (ins FPR64:$dst, GPR:$src),
|
99 | 99 | "$dst, $src">;
|
100 | 100 | } // hasSideEffects = 0, mayLoad = 0, mayStore = 0, Constraints = "$dst = $out"
|
101 | 101 |
|
102 | 102 | // Common Memory Access Instructions
|
103 |
| -def FLD_D : FP_LOAD_2RI12<0b0010101110, FPR64>; |
104 |
| -def FST_D : FP_STORE_2RI12<0b0010101111, FPR64>; |
105 |
| -def FLDX_D : FP_LOAD_3R<0b00111000001101000, FPR64>; |
106 |
| -def FSTX_D : FP_STORE_3R<0b00111000001111000, FPR64>; |
| 103 | +def FLD_D : FP_LOAD_2RI12<0x2b800000, FPR64>; |
| 104 | +def FST_D : FP_STORE_2RI12<0x2bc00000, FPR64>; |
| 105 | +def FLDX_D : FP_LOAD_3R<0x38340000, FPR64>; |
| 106 | +def FSTX_D : FP_STORE_3R<0x383c0000, FPR64>; |
107 | 107 |
|
108 | 108 | // Bound Check Memory Access Instructions
|
109 |
| -def FLDGT_D : FP_LOAD_3R<0b00111000011101001, FPR64>; |
110 |
| -def FLDLE_D : FP_LOAD_3R<0b00111000011101011, FPR64>; |
111 |
| -def FSTGT_D : FP_STORE_3R<0b00111000011101101, FPR64>; |
112 |
| -def FSTLE_D : FP_STORE_3R<0b00111000011101111, FPR64>; |
| 109 | +def FLDGT_D : FP_LOAD_3R<0x38748000, FPR64>; |
| 110 | +def FLDLE_D : FP_LOAD_3R<0x38758000, FPR64>; |
| 111 | +def FSTGT_D : FP_STORE_3R<0x38768000, FPR64>; |
| 112 | +def FSTLE_D : FP_STORE_3R<0x38778000, FPR64>; |
113 | 113 |
|
114 | 114 | } // Predicates = [HasBasicD]
|
115 | 115 |
|
116 | 116 | // Instructions only available on LA64
|
117 | 117 | let Predicates = [HasBasicD, IsLA64] in {
|
118 |
| -def MOVGR2FR_D : FP_MOV<0b0000000100010100101010, FPR64, GPR>; |
119 |
| -def MOVFR2GR_D : FP_MOV<0b0000000100010100101110, GPR, FPR64>; |
| 118 | +def MOVGR2FR_D : FP_MOV<0x0114a800, FPR64, GPR>; |
| 119 | +def MOVFR2GR_D : FP_MOV<0x0114b800, GPR, FPR64>; |
120 | 120 | } // Predicates = [HasBasicD, IsLA64]
|
121 | 121 |
|
122 | 122 | // Instructions only available on LA32
|
123 | 123 | let Predicates = [HasBasicD, IsLA32], isCodeGenOnly = 1 in {
|
124 |
| -def MOVGR2FR_W_64 : FP_MOV<0b0000000100010100101001, FPR64, GPR>; |
| 124 | +def MOVGR2FR_W_64 : FP_MOV<0x0114a400, FPR64, GPR>; |
125 | 125 | } // Predicates = [HasBasicD, IsLA32], isCodeGenOnly = 1
|
126 | 126 |
|
127 | 127 | //===----------------------------------------------------------------------===//
|
|
0 commit comments