Revision e854b6d3 tcg/arm/tcg-target.c

b/tcg/arm/tcg-target.c
499 499
    }
500 500
}
501 501

  
502
static inline void tcg_out_ext8u(TCGContext *s, int cond,
503
                                 int rd, int rn)
504
{
505
    tcg_out_dat_imm(s, cond, ARITH_AND, rd, rn, 0xff);
506
}
507

  
502 508
static inline void tcg_out_ext16s(TCGContext *s, int cond,
503 509
                                  int rd, int rn)
504 510
{
......
1017 1023

  
1018 1024
    switch (opc) {
1019 1025
    case 0 | 4:
1020
        tcg_out_dat_reg(s, COND_AL, ARITH_MOV,
1021
                        TCG_REG_R0, 0, TCG_REG_R0, SHIFT_IMM_LSL(24));
1022
        tcg_out_dat_reg(s, COND_AL, ARITH_MOV,
1023
                        data_reg, 0, TCG_REG_R0, SHIFT_IMM_ASR(24));
1026
        tcg_out_ext8s(s, COND_AL, data_reg, TCG_REG_R0);
1024 1027
        break;
1025 1028
    case 1 | 4:
1026
        tcg_out_dat_reg(s, COND_AL, ARITH_MOV,
1027
                        TCG_REG_R0, 0, TCG_REG_R0, SHIFT_IMM_LSL(16));
1028
        tcg_out_dat_reg(s, COND_AL, ARITH_MOV,
1029
                        data_reg, 0, TCG_REG_R0, SHIFT_IMM_ASR(16));
1029
        tcg_out_ext16s(s, COND_AL, data_reg, TCG_REG_R0);
1030 1030
        break;
1031 1031
    case 0:
1032 1032
    case 1:
......
1191 1191
# if TARGET_LONG_BITS == 32
1192 1192
    switch (opc) {
1193 1193
    case 0:
1194
        tcg_out_dat_imm(s, COND_AL, ARITH_AND, TCG_REG_R1, data_reg, 0xff);
1194
        tcg_out_ext8u(s, COND_AL, TCG_REG_R1, data_reg);
1195 1195
        tcg_out_dat_imm(s, COND_AL, ARITH_MOV, TCG_REG_R2, 0, mem_index);
1196 1196
        break;
1197 1197
    case 1:
1198
        tcg_out_dat_reg(s, COND_AL, ARITH_MOV,
1199
                        TCG_REG_R1, 0, data_reg, SHIFT_IMM_LSL(16));
1200
        tcg_out_dat_reg(s, COND_AL, ARITH_MOV,
1201
                        TCG_REG_R1, 0, TCG_REG_R1, SHIFT_IMM_LSR(16));
1198
        tcg_out_ext16u(s, COND_AL, TCG_REG_R1, data_reg);
1202 1199
        tcg_out_dat_imm(s, COND_AL, ARITH_MOV, TCG_REG_R2, 0, mem_index);
1203 1200
        break;
1204 1201
    case 2:
......
1227 1224
    }
1228 1225
    switch (opc) {
1229 1226
    case 0:
1230
        tcg_out_dat_imm(s, COND_AL, ARITH_AND, TCG_REG_R2, data_reg, 0xff);
1227
        tcg_out_ext8u(s, COND_AL, TCG_REG_R2, data_reg);
1231 1228
        tcg_out_dat_imm(s, COND_AL, ARITH_MOV, TCG_REG_R3, 0, mem_index);
1232 1229
        break;
1233 1230
    case 1:
1234
        tcg_out_dat_reg(s, COND_AL, ARITH_MOV,
1235
                        TCG_REG_R2, 0, data_reg, SHIFT_IMM_LSL(16));
1236
        tcg_out_dat_reg(s, COND_AL, ARITH_MOV,
1237
                        TCG_REG_R2, 0, TCG_REG_R2, SHIFT_IMM_LSR(16));
1231
        tcg_out_ext16u(s, COND_AL, TCG_REG_R2, data_reg);
1238 1232
        tcg_out_dat_imm(s, COND_AL, ARITH_MOV, TCG_REG_R3, 0, mem_index);
1239 1233
        break;
1240 1234
    case 2:

Also available in: Unified diff