diff options
Diffstat (limited to 'gas/config/tc-mips.c')
-rw-r--r-- | gas/config/tc-mips.c | 20 |
1 files changed, 14 insertions, 6 deletions
diff --git a/gas/config/tc-mips.c b/gas/config/tc-mips.c index 6a945e31568..05527d8084d 100644 --- a/gas/config/tc-mips.c +++ b/gas/config/tc-mips.c @@ -10350,7 +10350,10 @@ macro (struct mips_cl_insn *ip, char *str) case M_ADD_I: s = "addi"; s2 = "add"; - goto do_addi; + if (ISA_IS_R6 (mips_opts.isa)) + goto do_addi_i; + else + goto do_addi; case M_ADDU_I: s = "addiu"; s2 = "addu"; @@ -10359,10 +10362,11 @@ macro (struct mips_cl_insn *ip, char *str) dbl = 1; s = "daddi"; s2 = "dadd"; - if (!mips_opts.micromips) + if (!mips_opts.micromips && !ISA_IS_R6 (mips_opts.isa)) goto do_addi; if (imm_expr.X_add_number >= -0x200 - && imm_expr.X_add_number < 0x200) + && imm_expr.X_add_number < 0x200 + && !ISA_IS_R6 (mips_opts.isa)) { macro_build (NULL, s, "t,r,.", op[0], op[1], (int) imm_expr.X_add_number); @@ -13716,7 +13720,10 @@ macro (struct mips_cl_insn *ip, char *str) case M_SUB_I: s = "addi"; s2 = "sub"; - goto do_subi; + if (ISA_IS_R6 (mips_opts.isa)) + goto do_subi_i; + else + goto do_subi; case M_SUBU_I: s = "addiu"; s2 = "subu"; @@ -13725,10 +13732,11 @@ macro (struct mips_cl_insn *ip, char *str) dbl = 1; s = "daddi"; s2 = "dsub"; - if (!mips_opts.micromips) + if (!mips_opts.micromips && !ISA_IS_R6 (mips_opts.isa)) goto do_subi; if (imm_expr.X_add_number > -0x200 - && imm_expr.X_add_number <= 0x200) + && imm_expr.X_add_number <= 0x200 + && !ISA_IS_R6 (mips_opts.isa)) { macro_build (NULL, s, "t,r,.", op[0], op[1], (int) -imm_expr.X_add_number); |