Commit e2ea21b39660eb6938cb26a36248e23361d9534d
1 parent
1d01299d
Convert basic 64 bit VIS ops to TCG
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@5191 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
4 changed files
with
65 additions
and
102 deletions
target-sparc/TODO
| @@ -39,8 +39,6 @@ Sparc64 CPUs: | @@ -39,8 +39,6 @@ Sparc64 CPUs: | ||
| 39 | - Full hypervisor support | 39 | - Full hypervisor support |
| 40 | - SMP/CMT | 40 | - SMP/CMT |
| 41 | - Sun4v CPUs | 41 | - Sun4v CPUs |
| 42 | -- Optimizations/improvements: | ||
| 43 | - - Use TCG logic ops for VIS when possible | ||
| 44 | 42 | ||
| 45 | Sun4: | 43 | Sun4: |
| 46 | - To be added | 44 | - To be added |
target-sparc/helper.h
| @@ -139,15 +139,6 @@ F_HELPER_0_0(dtox); | @@ -139,15 +139,6 @@ F_HELPER_0_0(dtox); | ||
| 139 | F_HELPER_0_0(qtox); | 139 | F_HELPER_0_0(qtox); |
| 140 | F_HELPER_0_0(aligndata); | 140 | F_HELPER_0_0(aligndata); |
| 141 | 141 | ||
| 142 | -F_HELPER_0_0(not); | ||
| 143 | -F_HELPER_0_0(nor); | ||
| 144 | -F_HELPER_0_0(or); | ||
| 145 | -F_HELPER_0_0(xor); | ||
| 146 | -F_HELPER_0_0(and); | ||
| 147 | -F_HELPER_0_0(ornot); | ||
| 148 | -F_HELPER_0_0(andnot); | ||
| 149 | -F_HELPER_0_0(nand); | ||
| 150 | -F_HELPER_0_0(xnor); | ||
| 151 | F_HELPER_0_0(pmerge); | 142 | F_HELPER_0_0(pmerge); |
| 152 | F_HELPER_0_0(mul8x16); | 143 | F_HELPER_0_0(mul8x16); |
| 153 | F_HELPER_0_0(mul8x16al); | 144 | F_HELPER_0_0(mul8x16al); |
target-sparc/op_helper.c
| @@ -246,51 +246,6 @@ void helper_faligndata(void) | @@ -246,51 +246,6 @@ void helper_faligndata(void) | ||
| 246 | *((uint64_t *)&DT0) = tmp; | 246 | *((uint64_t *)&DT0) = tmp; |
| 247 | } | 247 | } |
| 248 | 248 | ||
| 249 | -void helper_fnot(void) | ||
| 250 | -{ | ||
| 251 | - *(uint64_t *)&DT0 = ~*(uint64_t *)&DT1; | ||
| 252 | -} | ||
| 253 | - | ||
| 254 | -void helper_fnor(void) | ||
| 255 | -{ | ||
| 256 | - *(uint64_t *)&DT0 = ~(*(uint64_t *)&DT0 | *(uint64_t *)&DT1); | ||
| 257 | -} | ||
| 258 | - | ||
| 259 | -void helper_for(void) | ||
| 260 | -{ | ||
| 261 | - *(uint64_t *)&DT0 |= *(uint64_t *)&DT1; | ||
| 262 | -} | ||
| 263 | - | ||
| 264 | -void helper_fxor(void) | ||
| 265 | -{ | ||
| 266 | - *(uint64_t *)&DT0 ^= *(uint64_t *)&DT1; | ||
| 267 | -} | ||
| 268 | - | ||
| 269 | -void helper_fand(void) | ||
| 270 | -{ | ||
| 271 | - *(uint64_t *)&DT0 &= *(uint64_t *)&DT1; | ||
| 272 | -} | ||
| 273 | - | ||
| 274 | -void helper_fornot(void) | ||
| 275 | -{ | ||
| 276 | - *(uint64_t *)&DT0 = *(uint64_t *)&DT0 | ~*(uint64_t *)&DT1; | ||
| 277 | -} | ||
| 278 | - | ||
| 279 | -void helper_fandnot(void) | ||
| 280 | -{ | ||
| 281 | - *(uint64_t *)&DT0 = *(uint64_t *)&DT0 & ~*(uint64_t *)&DT1; | ||
| 282 | -} | ||
| 283 | - | ||
| 284 | -void helper_fnand(void) | ||
| 285 | -{ | ||
| 286 | - *(uint64_t *)&DT0 = ~(*(uint64_t *)&DT0 & *(uint64_t *)&DT1); | ||
| 287 | -} | ||
| 288 | - | ||
| 289 | -void helper_fxnor(void) | ||
| 290 | -{ | ||
| 291 | - *(uint64_t *)&DT0 ^= ~*(uint64_t *)&DT1; | ||
| 292 | -} | ||
| 293 | - | ||
| 294 | #ifdef WORDS_BIGENDIAN | 249 | #ifdef WORDS_BIGENDIAN |
| 295 | #define VIS_B64(n) b[7 - (n)] | 250 | #define VIS_B64(n) b[7 - (n)] |
| 296 | #define VIS_W64(n) w[3 - (n)] | 251 | #define VIS_W64(n) w[3 - (n)] |
target-sparc/translate.c
| @@ -3886,10 +3886,12 @@ static void disas_sparc_insn(DisasContext * dc) | @@ -3886,10 +3886,12 @@ static void disas_sparc_insn(DisasContext * dc) | ||
| 3886 | break; | 3886 | break; |
| 3887 | case 0x062: /* VIS I fnor */ | 3887 | case 0x062: /* VIS I fnor */ |
| 3888 | CHECK_FPU_FEATURE(dc, VIS1); | 3888 | CHECK_FPU_FEATURE(dc, VIS1); |
| 3889 | - gen_op_load_fpr_DT0(DFPREG(rs1)); | ||
| 3890 | - gen_op_load_fpr_DT1(DFPREG(rs2)); | ||
| 3891 | - tcg_gen_helper_0_0(helper_fnor); | ||
| 3892 | - gen_op_store_DT0_fpr(DFPREG(rd)); | 3889 | + tcg_gen_or_i32(cpu_tmp32, cpu_fpr[DFPREG(rs1)], |
| 3890 | + cpu_fpr[DFPREG(rs2)]); | ||
| 3891 | + tcg_gen_xori_i32(cpu_fpr[DFPREG(rd)], cpu_tmp32, -1); | ||
| 3892 | + tcg_gen_or_i32(cpu_tmp32, cpu_fpr[DFPREG(rs1) + 1], | ||
| 3893 | + cpu_fpr[DFPREG(rs2) + 1]); | ||
| 3894 | + tcg_gen_xori_i32(cpu_fpr[DFPREG(rd) + 1], cpu_tmp32, -1); | ||
| 3893 | break; | 3895 | break; |
| 3894 | case 0x063: /* VIS I fnors */ | 3896 | case 0x063: /* VIS I fnors */ |
| 3895 | CHECK_FPU_FEATURE(dc, VIS1); | 3897 | CHECK_FPU_FEATURE(dc, VIS1); |
| @@ -3898,10 +3900,12 @@ static void disas_sparc_insn(DisasContext * dc) | @@ -3898,10 +3900,12 @@ static void disas_sparc_insn(DisasContext * dc) | ||
| 3898 | break; | 3900 | break; |
| 3899 | case 0x064: /* VIS I fandnot2 */ | 3901 | case 0x064: /* VIS I fandnot2 */ |
| 3900 | CHECK_FPU_FEATURE(dc, VIS1); | 3902 | CHECK_FPU_FEATURE(dc, VIS1); |
| 3901 | - gen_op_load_fpr_DT1(DFPREG(rs1)); | ||
| 3902 | - gen_op_load_fpr_DT0(DFPREG(rs2)); | ||
| 3903 | - tcg_gen_helper_0_0(helper_fandnot); | ||
| 3904 | - gen_op_store_DT0_fpr(DFPREG(rd)); | 3903 | + tcg_gen_xori_i32(cpu_tmp32, cpu_fpr[DFPREG(rs1)], -1); |
| 3904 | + tcg_gen_and_i32(cpu_fpr[DFPREG(rd)], cpu_tmp32, | ||
| 3905 | + cpu_fpr[DFPREG(rs2)]); | ||
| 3906 | + tcg_gen_xori_i32(cpu_tmp32, cpu_fpr[DFPREG(rs1) + 1], -1); | ||
| 3907 | + tcg_gen_and_i32(cpu_fpr[DFPREG(rd) + 1], cpu_tmp32, | ||
| 3908 | + cpu_fpr[DFPREG(rs2) + 1]); | ||
| 3905 | break; | 3909 | break; |
| 3906 | case 0x065: /* VIS I fandnot2s */ | 3910 | case 0x065: /* VIS I fandnot2s */ |
| 3907 | CHECK_FPU_FEATURE(dc, VIS1); | 3911 | CHECK_FPU_FEATURE(dc, VIS1); |
| @@ -3910,9 +3914,10 @@ static void disas_sparc_insn(DisasContext * dc) | @@ -3910,9 +3914,10 @@ static void disas_sparc_insn(DisasContext * dc) | ||
| 3910 | break; | 3914 | break; |
| 3911 | case 0x066: /* VIS I fnot2 */ | 3915 | case 0x066: /* VIS I fnot2 */ |
| 3912 | CHECK_FPU_FEATURE(dc, VIS1); | 3916 | CHECK_FPU_FEATURE(dc, VIS1); |
| 3913 | - gen_op_load_fpr_DT1(DFPREG(rs2)); | ||
| 3914 | - tcg_gen_helper_0_0(helper_fnot); | ||
| 3915 | - gen_op_store_DT0_fpr(DFPREG(rd)); | 3917 | + tcg_gen_xori_i32(cpu_fpr[DFPREG(rd)], cpu_fpr[DFPREG(rs2)], |
| 3918 | + -1); | ||
| 3919 | + tcg_gen_xori_i32(cpu_fpr[DFPREG(rd) + 1], | ||
| 3920 | + cpu_fpr[DFPREG(rs2) + 1], -1); | ||
| 3916 | break; | 3921 | break; |
| 3917 | case 0x067: /* VIS I fnot2s */ | 3922 | case 0x067: /* VIS I fnot2s */ |
| 3918 | CHECK_FPU_FEATURE(dc, VIS1); | 3923 | CHECK_FPU_FEATURE(dc, VIS1); |
| @@ -3920,10 +3925,12 @@ static void disas_sparc_insn(DisasContext * dc) | @@ -3920,10 +3925,12 @@ static void disas_sparc_insn(DisasContext * dc) | ||
| 3920 | break; | 3925 | break; |
| 3921 | case 0x068: /* VIS I fandnot1 */ | 3926 | case 0x068: /* VIS I fandnot1 */ |
| 3922 | CHECK_FPU_FEATURE(dc, VIS1); | 3927 | CHECK_FPU_FEATURE(dc, VIS1); |
| 3923 | - gen_op_load_fpr_DT0(DFPREG(rs1)); | ||
| 3924 | - gen_op_load_fpr_DT1(DFPREG(rs2)); | ||
| 3925 | - tcg_gen_helper_0_0(helper_fandnot); | ||
| 3926 | - gen_op_store_DT0_fpr(DFPREG(rd)); | 3928 | + tcg_gen_xori_i32(cpu_tmp32, cpu_fpr[DFPREG(rs2)], -1); |
| 3929 | + tcg_gen_and_i32(cpu_fpr[DFPREG(rd)], cpu_tmp32, | ||
| 3930 | + cpu_fpr[DFPREG(rs1)]); | ||
| 3931 | + tcg_gen_xori_i32(cpu_tmp32, cpu_fpr[DFPREG(rs2)], -1); | ||
| 3932 | + tcg_gen_and_i32(cpu_fpr[DFPREG(rd) + 1], cpu_tmp32, | ||
| 3933 | + cpu_fpr[DFPREG(rs1) + 1]); | ||
| 3927 | break; | 3934 | break; |
| 3928 | case 0x069: /* VIS I fandnot1s */ | 3935 | case 0x069: /* VIS I fandnot1s */ |
| 3929 | CHECK_FPU_FEATURE(dc, VIS1); | 3936 | CHECK_FPU_FEATURE(dc, VIS1); |
| @@ -3932,9 +3939,10 @@ static void disas_sparc_insn(DisasContext * dc) | @@ -3932,9 +3939,10 @@ static void disas_sparc_insn(DisasContext * dc) | ||
| 3932 | break; | 3939 | break; |
| 3933 | case 0x06a: /* VIS I fnot1 */ | 3940 | case 0x06a: /* VIS I fnot1 */ |
| 3934 | CHECK_FPU_FEATURE(dc, VIS1); | 3941 | CHECK_FPU_FEATURE(dc, VIS1); |
| 3935 | - gen_op_load_fpr_DT1(DFPREG(rs1)); | ||
| 3936 | - tcg_gen_helper_0_0(helper_fnot); | ||
| 3937 | - gen_op_store_DT0_fpr(DFPREG(rd)); | 3942 | + tcg_gen_xori_i32(cpu_fpr[DFPREG(rd)], cpu_fpr[DFPREG(rs1)], |
| 3943 | + -1); | ||
| 3944 | + tcg_gen_xori_i32(cpu_fpr[DFPREG(rd) + 1], | ||
| 3945 | + cpu_fpr[DFPREG(rs1) + 1], -1); | ||
| 3938 | break; | 3946 | break; |
| 3939 | case 0x06b: /* VIS I fnot1s */ | 3947 | case 0x06b: /* VIS I fnot1s */ |
| 3940 | CHECK_FPU_FEATURE(dc, VIS1); | 3948 | CHECK_FPU_FEATURE(dc, VIS1); |
| @@ -3942,10 +3950,11 @@ static void disas_sparc_insn(DisasContext * dc) | @@ -3942,10 +3950,11 @@ static void disas_sparc_insn(DisasContext * dc) | ||
| 3942 | break; | 3950 | break; |
| 3943 | case 0x06c: /* VIS I fxor */ | 3951 | case 0x06c: /* VIS I fxor */ |
| 3944 | CHECK_FPU_FEATURE(dc, VIS1); | 3952 | CHECK_FPU_FEATURE(dc, VIS1); |
| 3945 | - gen_op_load_fpr_DT0(DFPREG(rs1)); | ||
| 3946 | - gen_op_load_fpr_DT1(DFPREG(rs2)); | ||
| 3947 | - tcg_gen_helper_0_0(helper_fxor); | ||
| 3948 | - gen_op_store_DT0_fpr(DFPREG(rd)); | 3953 | + tcg_gen_xor_i32(cpu_fpr[DFPREG(rd)], cpu_fpr[DFPREG(rs1)], |
| 3954 | + cpu_fpr[DFPREG(rs2)]); | ||
| 3955 | + tcg_gen_xor_i32(cpu_fpr[DFPREG(rd) + 1], | ||
| 3956 | + cpu_fpr[DFPREG(rs1) + 1], | ||
| 3957 | + cpu_fpr[DFPREG(rs2) + 1]); | ||
| 3949 | break; | 3958 | break; |
| 3950 | case 0x06d: /* VIS I fxors */ | 3959 | case 0x06d: /* VIS I fxors */ |
| 3951 | CHECK_FPU_FEATURE(dc, VIS1); | 3960 | CHECK_FPU_FEATURE(dc, VIS1); |
| @@ -3953,10 +3962,12 @@ static void disas_sparc_insn(DisasContext * dc) | @@ -3953,10 +3962,12 @@ static void disas_sparc_insn(DisasContext * dc) | ||
| 3953 | break; | 3962 | break; |
| 3954 | case 0x06e: /* VIS I fnand */ | 3963 | case 0x06e: /* VIS I fnand */ |
| 3955 | CHECK_FPU_FEATURE(dc, VIS1); | 3964 | CHECK_FPU_FEATURE(dc, VIS1); |
| 3956 | - gen_op_load_fpr_DT0(DFPREG(rs1)); | ||
| 3957 | - gen_op_load_fpr_DT1(DFPREG(rs2)); | ||
| 3958 | - tcg_gen_helper_0_0(helper_fnand); | ||
| 3959 | - gen_op_store_DT0_fpr(DFPREG(rd)); | 3965 | + tcg_gen_and_i32(cpu_tmp32, cpu_fpr[DFPREG(rs1)], |
| 3966 | + cpu_fpr[DFPREG(rs2)]); | ||
| 3967 | + tcg_gen_xori_i32(cpu_fpr[DFPREG(rd)], cpu_tmp32, -1); | ||
| 3968 | + tcg_gen_and_i32(cpu_tmp32, cpu_fpr[DFPREG(rs1) + 1], | ||
| 3969 | + cpu_fpr[DFPREG(rs2) + 1]); | ||
| 3970 | + tcg_gen_xori_i32(cpu_fpr[DFPREG(rd) + 1], cpu_tmp32, -1); | ||
| 3960 | break; | 3971 | break; |
| 3961 | case 0x06f: /* VIS I fnands */ | 3972 | case 0x06f: /* VIS I fnands */ |
| 3962 | CHECK_FPU_FEATURE(dc, VIS1); | 3973 | CHECK_FPU_FEATURE(dc, VIS1); |
| @@ -3965,10 +3976,11 @@ static void disas_sparc_insn(DisasContext * dc) | @@ -3965,10 +3976,11 @@ static void disas_sparc_insn(DisasContext * dc) | ||
| 3965 | break; | 3976 | break; |
| 3966 | case 0x070: /* VIS I fand */ | 3977 | case 0x070: /* VIS I fand */ |
| 3967 | CHECK_FPU_FEATURE(dc, VIS1); | 3978 | CHECK_FPU_FEATURE(dc, VIS1); |
| 3968 | - gen_op_load_fpr_DT0(DFPREG(rs1)); | ||
| 3969 | - gen_op_load_fpr_DT1(DFPREG(rs2)); | ||
| 3970 | - tcg_gen_helper_0_0(helper_fand); | ||
| 3971 | - gen_op_store_DT0_fpr(DFPREG(rd)); | 3979 | + tcg_gen_and_i32(cpu_fpr[DFPREG(rd)], cpu_fpr[DFPREG(rs1)], |
| 3980 | + cpu_fpr[DFPREG(rs2)]); | ||
| 3981 | + tcg_gen_and_i32(cpu_fpr[DFPREG(rd) + 1], | ||
| 3982 | + cpu_fpr[DFPREG(rs1) + 1], | ||
| 3983 | + cpu_fpr[DFPREG(rs2) + 1]); | ||
| 3972 | break; | 3984 | break; |
| 3973 | case 0x071: /* VIS I fands */ | 3985 | case 0x071: /* VIS I fands */ |
| 3974 | CHECK_FPU_FEATURE(dc, VIS1); | 3986 | CHECK_FPU_FEATURE(dc, VIS1); |
| @@ -3976,10 +3988,12 @@ static void disas_sparc_insn(DisasContext * dc) | @@ -3976,10 +3988,12 @@ static void disas_sparc_insn(DisasContext * dc) | ||
| 3976 | break; | 3988 | break; |
| 3977 | case 0x072: /* VIS I fxnor */ | 3989 | case 0x072: /* VIS I fxnor */ |
| 3978 | CHECK_FPU_FEATURE(dc, VIS1); | 3990 | CHECK_FPU_FEATURE(dc, VIS1); |
| 3979 | - gen_op_load_fpr_DT0(DFPREG(rs1)); | ||
| 3980 | - gen_op_load_fpr_DT1(DFPREG(rs2)); | ||
| 3981 | - tcg_gen_helper_0_0(helper_fxnor); | ||
| 3982 | - gen_op_store_DT0_fpr(DFPREG(rd)); | 3991 | + tcg_gen_xori_i32(cpu_tmp32, cpu_fpr[DFPREG(rs2)], -1); |
| 3992 | + tcg_gen_xor_i32(cpu_fpr[DFPREG(rd)], cpu_tmp32, | ||
| 3993 | + cpu_fpr[DFPREG(rs1)]); | ||
| 3994 | + tcg_gen_xori_i32(cpu_tmp32, cpu_fpr[DFPREG(rs2) + 1], -1); | ||
| 3995 | + tcg_gen_xor_i32(cpu_fpr[DFPREG(rd) + 1], cpu_tmp32, | ||
| 3996 | + cpu_fpr[DFPREG(rs1) + 1]); | ||
| 3983 | break; | 3997 | break; |
| 3984 | case 0x073: /* VIS I fxnors */ | 3998 | case 0x073: /* VIS I fxnors */ |
| 3985 | CHECK_FPU_FEATURE(dc, VIS1); | 3999 | CHECK_FPU_FEATURE(dc, VIS1); |
| @@ -3998,10 +4012,12 @@ static void disas_sparc_insn(DisasContext * dc) | @@ -3998,10 +4012,12 @@ static void disas_sparc_insn(DisasContext * dc) | ||
| 3998 | break; | 4012 | break; |
| 3999 | case 0x076: /* VIS I fornot2 */ | 4013 | case 0x076: /* VIS I fornot2 */ |
| 4000 | CHECK_FPU_FEATURE(dc, VIS1); | 4014 | CHECK_FPU_FEATURE(dc, VIS1); |
| 4001 | - gen_op_load_fpr_DT1(DFPREG(rs1)); | ||
| 4002 | - gen_op_load_fpr_DT0(DFPREG(rs2)); | ||
| 4003 | - tcg_gen_helper_0_0(helper_fornot); | ||
| 4004 | - gen_op_store_DT0_fpr(DFPREG(rd)); | 4015 | + tcg_gen_xori_i32(cpu_tmp32, cpu_fpr[DFPREG(rs1)], -1); |
| 4016 | + tcg_gen_or_i32(cpu_fpr[DFPREG(rd)], cpu_tmp32, | ||
| 4017 | + cpu_fpr[DFPREG(rs2)]); | ||
| 4018 | + tcg_gen_xori_i32(cpu_tmp32, cpu_fpr[DFPREG(rs1) + 1], -1); | ||
| 4019 | + tcg_gen_or_i32(cpu_fpr[DFPREG(rd) + 1], cpu_tmp32, | ||
| 4020 | + cpu_fpr[DFPREG(rs2) + 1]); | ||
| 4005 | break; | 4021 | break; |
| 4006 | case 0x077: /* VIS I fornot2s */ | 4022 | case 0x077: /* VIS I fornot2s */ |
| 4007 | CHECK_FPU_FEATURE(dc, VIS1); | 4023 | CHECK_FPU_FEATURE(dc, VIS1); |
| @@ -4019,10 +4035,12 @@ static void disas_sparc_insn(DisasContext * dc) | @@ -4019,10 +4035,12 @@ static void disas_sparc_insn(DisasContext * dc) | ||
| 4019 | break; | 4035 | break; |
| 4020 | case 0x07a: /* VIS I fornot1 */ | 4036 | case 0x07a: /* VIS I fornot1 */ |
| 4021 | CHECK_FPU_FEATURE(dc, VIS1); | 4037 | CHECK_FPU_FEATURE(dc, VIS1); |
| 4022 | - gen_op_load_fpr_DT0(DFPREG(rs1)); | ||
| 4023 | - gen_op_load_fpr_DT1(DFPREG(rs2)); | ||
| 4024 | - tcg_gen_helper_0_0(helper_fornot); | ||
| 4025 | - gen_op_store_DT0_fpr(DFPREG(rd)); | 4038 | + tcg_gen_xori_i32(cpu_tmp32, cpu_fpr[DFPREG(rs2)], -1); |
| 4039 | + tcg_gen_or_i32(cpu_fpr[DFPREG(rd)], cpu_tmp32, | ||
| 4040 | + cpu_fpr[DFPREG(rs1)]); | ||
| 4041 | + tcg_gen_xori_i32(cpu_tmp32, cpu_fpr[DFPREG(rs2) + 1], -1); | ||
| 4042 | + tcg_gen_or_i32(cpu_fpr[DFPREG(rd) + 1], cpu_tmp32, | ||
| 4043 | + cpu_fpr[DFPREG(rs1) + 1]); | ||
| 4026 | break; | 4044 | break; |
| 4027 | case 0x07b: /* VIS I fornot1s */ | 4045 | case 0x07b: /* VIS I fornot1s */ |
| 4028 | CHECK_FPU_FEATURE(dc, VIS1); | 4046 | CHECK_FPU_FEATURE(dc, VIS1); |
| @@ -4031,10 +4049,11 @@ static void disas_sparc_insn(DisasContext * dc) | @@ -4031,10 +4049,11 @@ static void disas_sparc_insn(DisasContext * dc) | ||
| 4031 | break; | 4049 | break; |
| 4032 | case 0x07c: /* VIS I for */ | 4050 | case 0x07c: /* VIS I for */ |
| 4033 | CHECK_FPU_FEATURE(dc, VIS1); | 4051 | CHECK_FPU_FEATURE(dc, VIS1); |
| 4034 | - gen_op_load_fpr_DT0(DFPREG(rs1)); | ||
| 4035 | - gen_op_load_fpr_DT1(DFPREG(rs2)); | ||
| 4036 | - tcg_gen_helper_0_0(helper_for); | ||
| 4037 | - gen_op_store_DT0_fpr(DFPREG(rd)); | 4052 | + tcg_gen_or_i32(cpu_fpr[DFPREG(rd)], cpu_fpr[DFPREG(rs1)], |
| 4053 | + cpu_fpr[DFPREG(rs2)]); | ||
| 4054 | + tcg_gen_or_i32(cpu_fpr[DFPREG(rd) + 1], | ||
| 4055 | + cpu_fpr[DFPREG(rs1) + 1], | ||
| 4056 | + cpu_fpr[DFPREG(rs2) + 1]); | ||
| 4038 | break; | 4057 | break; |
| 4039 | case 0x07d: /* VIS I fors */ | 4058 | case 0x07d: /* VIS I fors */ |
| 4040 | CHECK_FPU_FEATURE(dc, VIS1); | 4059 | CHECK_FPU_FEATURE(dc, VIS1); |