From c59c28f87a74931b1c3d86fc1d9df83ba0cd429e Mon Sep 17 00:00:00 2001 From: Thiemo Seufer Date: Fri, 18 Feb 2005 22:12:53 +0000 Subject: [PATCH] /gas/ChangeLog * config/tc-mips.c (macro_build_ldst_constoffset): Fail on $at uses after .set noat. (load_address): Likewise. (macro): Likewise. Don't try to avoid $at use by sacrificing the target register before it is stored, it won't work. /gas/testsuite/ChangeLog * gas/mips/noat-1.s, gas/mips/noat-1.d, gas/mips/noat-2.s, gas/mips/noat2.l, gas/mips/noat-3.s, gas/mips/noat-3.l, gas/mips/noat-4.s, gas/mips/noat-4.l, gas/mips/noat-5.s, gas/mips/noat-5.l, gas/mips/noat-6.s, gas/mips/noat-6.l, gas/mips/noat-7.s, gas/mips/noat-7.l: New files, testcases for .set noat in macro expansions. * gas/mips/mips.exp: Run new testcases. * gas/mips/rol-hw.d, gas/mips/rol-hw.l, gas/mips/rol.d, gas/mips/rol.l, gas/mips/rol.s, gas/mips/rol64-hw.d, gas/mips/rol64-hw.l, gas/mips/rol64.d, gas/mips/rol64.l, gas/mips/rol64.s, gas/mips/uld2-eb.d, gas/mips/uld2-el.d, gas/mips/uld2.l, gas/mips/uld2.s, gas/mips/ulh2-eb.d, gas/mips/ulh2-el.d, gas/mips/ulh2.l, gas/mips/ulh2.s, gas/mips/ulw2-eb-ilocks.d, gas/mips/ulw2-eb.d, gas/mips/ulw2-el-ilocks.d, gas/mips/ulw2-el.d, gas/mips/ulw2.l, gas/mips/ulw2.s: Don't try to test .set noat. --- gas/ChangeLog | 8 + gas/config/tc-mips.c | 300 ++++++++++++++++---------------- gas/testsuite/ChangeLog | 19 ++ gas/testsuite/gas/mips/mips.exp | 8 + gas/testsuite/gas/mips/noat-1.d | 15 ++ gas/testsuite/gas/mips/noat-1.s | 7 + gas/testsuite/gas/mips/noat-2.l | 2 + gas/testsuite/gas/mips/noat-2.s | 4 + gas/testsuite/gas/mips/noat-3.l | 2 + gas/testsuite/gas/mips/noat-3.s | 4 + gas/testsuite/gas/mips/noat-4.l | 2 + gas/testsuite/gas/mips/noat-4.s | 4 + gas/testsuite/gas/mips/noat-5.l | 2 + gas/testsuite/gas/mips/noat-5.s | 4 + gas/testsuite/gas/mips/noat-6.l | 2 + gas/testsuite/gas/mips/noat-6.s | 4 + gas/testsuite/gas/mips/noat-7.l | 2 + gas/testsuite/gas/mips/noat-7.s | 4 + gas/testsuite/gas/mips/rol-hw.d | 1 - gas/testsuite/gas/mips/rol-hw.l | 2 - gas/testsuite/gas/mips/rol.d | 1 - gas/testsuite/gas/mips/rol.l | 13 -- gas/testsuite/gas/mips/rol.s | 3 - gas/testsuite/gas/mips/rol64-hw.d | 1 - gas/testsuite/gas/mips/rol64-hw.l | 2 - gas/testsuite/gas/mips/rol64.d | 1 - gas/testsuite/gas/mips/rol64.l | 27 --- gas/testsuite/gas/mips/rol64.s | 3 - gas/testsuite/gas/mips/uld2-eb.d | 1 - gas/testsuite/gas/mips/uld2-el.d | 1 - gas/testsuite/gas/mips/uld2.l | 3 - gas/testsuite/gas/mips/uld2.s | 2 - gas/testsuite/gas/mips/ulh2-eb.d | 1 - gas/testsuite/gas/mips/ulh2-el.d | 1 - gas/testsuite/gas/mips/ulh2.l | 9 - gas/testsuite/gas/mips/ulh2.s | 2 - gas/testsuite/gas/mips/ulw2-eb-ilocks.d | 1 - gas/testsuite/gas/mips/ulw2-eb.d | 1 - gas/testsuite/gas/mips/ulw2-el-ilocks.d | 1 - gas/testsuite/gas/mips/ulw2-el.d | 1 - gas/testsuite/gas/mips/ulw2.l | 3 - gas/testsuite/gas/mips/ulw2.s | 2 - 42 files changed, 243 insertions(+), 233 deletions(-) create mode 100644 gas/testsuite/gas/mips/noat-1.d create mode 100644 gas/testsuite/gas/mips/noat-1.s create mode 100644 gas/testsuite/gas/mips/noat-2.l create mode 100644 gas/testsuite/gas/mips/noat-2.s create mode 100644 gas/testsuite/gas/mips/noat-3.l create mode 100644 gas/testsuite/gas/mips/noat-3.s create mode 100644 gas/testsuite/gas/mips/noat-4.l create mode 100644 gas/testsuite/gas/mips/noat-4.s create mode 100644 gas/testsuite/gas/mips/noat-5.l create mode 100644 gas/testsuite/gas/mips/noat-5.s create mode 100644 gas/testsuite/gas/mips/noat-6.l create mode 100644 gas/testsuite/gas/mips/noat-6.s create mode 100644 gas/testsuite/gas/mips/noat-7.l create mode 100644 gas/testsuite/gas/mips/noat-7.s delete mode 100644 gas/testsuite/gas/mips/rol-hw.l delete mode 100644 gas/testsuite/gas/mips/rol.l delete mode 100644 gas/testsuite/gas/mips/rol64-hw.l delete mode 100644 gas/testsuite/gas/mips/rol64.l delete mode 100644 gas/testsuite/gas/mips/uld2.l delete mode 100644 gas/testsuite/gas/mips/ulh2.l delete mode 100644 gas/testsuite/gas/mips/ulw2.l diff --git a/gas/ChangeLog b/gas/ChangeLog index 83c16828f..bc63a19aa 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,11 @@ +2005-02-18 Thiemo Seufer + + * config/tc-mips.c (macro_build_ldst_constoffset): Fail on $at + uses after .set noat. + (load_address): Likewise. + (macro): Likewise. Don't try to avoid $at use by sacrificing + the target register before it is stored, it won't work. + 2005-02-17 James E Wilson * config/tc-ia64.c (emit_one_bundle): Stop filling a bundle if we diff --git a/gas/config/tc-mips.c b/gas/config/tc-mips.c index 0e246dd91..c2129b3fe 100644 --- a/gas/config/tc-mips.c +++ b/gas/config/tc-mips.c @@ -3461,7 +3461,7 @@ macro_build_ldst_constoffset (expressionS *ep, const char *op, macro_build (ep, op, "t,o(b)", treg, BFD_RELOC_LO16, AT); if (mips_opts.noat) - as_warn (_("Macro used $at after \".set noat\"")); + as_bad (_("Macro used $at after \".set noat\"")); } } @@ -4060,6 +4060,9 @@ load_address (int reg, expressionS *ep, int *used_at) } else abort (); + + if (mips_opts.noat && *used_at == 1) + as_bad (_("Macro used $at after \".set noat\"")); } /* Move the contents of register SOURCE into register DEST. */ @@ -4221,7 +4224,7 @@ macro (struct mips_cl_insn *ip) macro_build (NULL, dbl ? "dsub" : "sub", "d,v,t", dreg, 0, sreg); --mips_opts.noreorder; - return; + break; case M_ADD_I: s = "addi"; @@ -4246,8 +4249,9 @@ macro (struct mips_cl_insn *ip) && imm_expr.X_add_number < 0x8000) { macro_build (&imm_expr, s, "t,r,j", treg, sreg, BFD_RELOC_LO16); - return; + break; } + used_at = 1; load_register (AT, &imm_expr, dbl); macro_build (NULL, s2, "d,v,t", treg, sreg, AT); break; @@ -4280,9 +4284,10 @@ macro (struct mips_cl_insn *ip) treg, sreg, BFD_RELOC_LO16); macro_build (NULL, "nor", "d,v,t", treg, treg, 0); } - return; + break; } + used_at = 1; load_register (AT, &imm_expr, HAVE_64BIT_GPRS); macro_build (NULL, s2, "d,v,t", treg, sreg, AT); break; @@ -4304,8 +4309,9 @@ macro (struct mips_cl_insn *ip) if (imm_expr.X_op == O_constant && imm_expr.X_add_number == 0) { macro_build (&offset_expr, s, "s,t,p", sreg, 0); - return; + break; } + used_at = 1; load_register (AT, &imm_expr, HAVE_64BIT_GPRS); macro_build (&offset_expr, s, "s,t,p", sreg, AT); break; @@ -4316,13 +4322,14 @@ macro (struct mips_cl_insn *ip) if (treg == 0) { macro_build (&offset_expr, likely ? "bgezl" : "bgez", "s,p", sreg); - return; + break; } if (sreg == 0) { macro_build (&offset_expr, likely ? "blezl" : "blez", "s,p", treg); - return; + break; } + used_at = 1; macro_build (NULL, "slt", "d,v,t", AT, sreg, treg); macro_build (&offset_expr, likely ? "beql" : "beq", "s,t,p", AT, 0); break; @@ -4349,7 +4356,7 @@ macro (struct mips_cl_insn *ip) macro_build (NULL, "nop", "", 0); else macro_build (&offset_expr, "bnel", "s,t,p", 0, 0); - return; + break; } if (imm_expr.X_op != O_constant) as_bad (_("Unsupported large constant")); @@ -4362,12 +4369,12 @@ macro (struct mips_cl_insn *ip) if (imm_expr.X_op == O_constant && imm_expr.X_add_number == 0) { macro_build (&offset_expr, likely ? "bgezl" : "bgez", "s,p", sreg); - return; + break; } if (imm_expr.X_op == O_constant && imm_expr.X_add_number == 1) { macro_build (&offset_expr, likely ? "bgtzl" : "bgtz", "s,p", sreg); - return; + break; } maxnum = 0x7fffffff; if (HAVE_64BIT_GPRS && sizeof (maxnum) > 4) @@ -4386,8 +4393,9 @@ macro (struct mips_cl_insn *ip) /* result is always true */ as_warn (_("Branch %s is always true"), ip->insn_mo->name); macro_build (&offset_expr, "b", "p"); - return; + break; } + used_at = 1; set_at (sreg, 0); macro_build (&offset_expr, likely ? "beql" : "beq", "s,t,p", AT, 0); break; @@ -4401,8 +4409,9 @@ macro (struct mips_cl_insn *ip) { macro_build (&offset_expr, likely ? "beql" : "beq", "s,t,p", 0, treg); - return; + break; } + used_at = 1; macro_build (NULL, "sltu", "d,v,t", AT, sreg, treg); macro_build (&offset_expr, likely ? "beql" : "beq", "s,t,p", AT, 0); break; @@ -4429,8 +4438,9 @@ macro (struct mips_cl_insn *ip) { macro_build (&offset_expr, likely ? "bnel" : "bne", "s,t,p", sreg, 0); - return; + break; } + used_at = 1; set_at (sreg, 1); macro_build (&offset_expr, likely ? "beql" : "beq", "s,t,p", AT, 0); break; @@ -4441,13 +4451,14 @@ macro (struct mips_cl_insn *ip) if (treg == 0) { macro_build (&offset_expr, likely ? "bgtzl" : "bgtz", "s,p", sreg); - return; + break; } if (sreg == 0) { macro_build (&offset_expr, likely ? "bltzl" : "bltz", "s,p", treg); - return; + break; } + used_at = 1; macro_build (NULL, "slt", "d,v,t", AT, treg, sreg); macro_build (&offset_expr, likely ? "bnel" : "bne", "s,t,p", AT, 0); break; @@ -4459,10 +4470,11 @@ macro (struct mips_cl_insn *ip) { macro_build (&offset_expr, likely ? "bnel" : "bne", "s,t,p", sreg, 0); - return; + break; } if (sreg == 0) goto do_false; + used_at = 1; macro_build (NULL, "sltu", "d,v,t", AT, treg, sreg); macro_build (&offset_expr, likely ? "bnel" : "bne", "s,t,p", AT, 0); break; @@ -4473,13 +4485,14 @@ macro (struct mips_cl_insn *ip) if (treg == 0) { macro_build (&offset_expr, likely ? "blezl" : "blez", "s,p", sreg); - return; + break; } if (sreg == 0) { macro_build (&offset_expr, likely ? "bgezl" : "bgez", "s,p", treg); - return; + break; } + used_at = 1; macro_build (NULL, "slt", "d,v,t", AT, treg, sreg); macro_build (&offset_expr, likely ? "beql" : "beq", "s,t,p", AT, 0); break; @@ -4510,13 +4523,14 @@ macro (struct mips_cl_insn *ip) if (imm_expr.X_op == O_constant && imm_expr.X_add_number == 0) { macro_build (&offset_expr, likely ? "bltzl" : "bltz", "s,p", sreg); - return; + break; } if (imm_expr.X_op == O_constant && imm_expr.X_add_number == 1) { macro_build (&offset_expr, likely ? "blezl" : "blez", "s,p", sreg); - return; + break; } + used_at = 1; set_at (sreg, 0); macro_build (&offset_expr, likely ? "bnel" : "bne", "s,t,p", AT, 0); break; @@ -4528,10 +4542,11 @@ macro (struct mips_cl_insn *ip) { macro_build (&offset_expr, likely ? "beql" : "beq", "s,t,p", sreg, 0); - return; + break; } if (sreg == 0) goto do_true; + used_at = 1; macro_build (NULL, "sltu", "d,v,t", AT, treg, sreg); macro_build (&offset_expr, likely ? "beql" : "beq", "s,t,p", AT, 0); break; @@ -4558,8 +4573,9 @@ macro (struct mips_cl_insn *ip) { macro_build (&offset_expr, likely ? "beql" : "beq", "s,t,p", sreg, 0); - return; + break; } + used_at = 1; set_at (sreg, 1); macro_build (&offset_expr, likely ? "bnel" : "bne", "s,t,p", AT, 0); break; @@ -4570,13 +4586,14 @@ macro (struct mips_cl_insn *ip) if (treg == 0) { macro_build (&offset_expr, likely ? "bltzl" : "bltz", "s,p", sreg); - return; + break; } if (sreg == 0) { macro_build (&offset_expr, likely ? "bgtzl" : "bgtz", "s,p", treg); - return; + break; } + used_at = 1; macro_build (NULL, "slt", "d,v,t", AT, sreg, treg); macro_build (&offset_expr, likely ? "bnel" : "bne", "s,t,p", AT, 0); break; @@ -4590,8 +4607,9 @@ macro (struct mips_cl_insn *ip) { macro_build (&offset_expr, likely ? "bnel" : "bne", "s,t,p", 0, treg); - return; + break; } + used_at = 1; macro_build (NULL, "sltu", "d,v,t", AT, sreg, treg); macro_build (&offset_expr, likely ? "bnel" : "bne", "s,t,p", AT, 0); break; @@ -4642,7 +4660,7 @@ macro (struct mips_cl_insn *ip) } macro_build ((expressionS *) NULL, s, fmt, treg, sreg, pos, size - 1); } - return; + break; case M_DINS: { @@ -4691,7 +4709,7 @@ macro (struct mips_cl_insn *ip) macro_build ((expressionS *) NULL, s, fmt, treg, sreg, pos, pos + size - 1); } - return; + break; case M_DDIV_3: dbl = 1; @@ -4710,7 +4728,7 @@ macro (struct mips_cl_insn *ip) macro_build (NULL, "teq", "s,t,q", 0, 0, 7); else macro_build (NULL, "break", "c", 7); - return; + break; } mips_emit_delays (TRUE); @@ -4729,6 +4747,7 @@ macro (struct mips_cl_insn *ip) macro_build (NULL, "break", "c", 7); } expr1.X_add_number = -1; + used_at = 1; load_register (AT, &expr1, dbl); expr1.X_add_number = mips_trap ? (dbl ? 12 : 8) : (dbl ? 20 : 16); macro_build (&expr1, "bne", "s,t,p", treg, AT); @@ -4808,7 +4827,7 @@ macro (struct mips_cl_insn *ip) macro_build (NULL, "teq", "s,t,q", 0, 0, 7); else macro_build (NULL, "break", "c", 7); - return; + break; } if (imm_expr.X_op == O_constant && imm_expr.X_add_number == 1) { @@ -4816,7 +4835,7 @@ macro (struct mips_cl_insn *ip) move_register (dreg, sreg); else move_register (dreg, 0); - return; + break; } if (imm_expr.X_op == O_constant && imm_expr.X_add_number == -1 @@ -4828,9 +4847,10 @@ macro (struct mips_cl_insn *ip) } else move_register (dreg, 0); - return; + break; } + used_at = 1; load_register (AT, &imm_expr, dbl); macro_build (NULL, s, "z,s,t", sreg, AT); macro_build (NULL, s2, "d", dreg); @@ -4875,7 +4895,7 @@ macro (struct mips_cl_insn *ip) macro_build (NULL, "break", "c", 7); } macro_build (NULL, s2, "d", dreg); - return; + break; case M_DLCA_AB: dbl = 1; @@ -4902,7 +4922,7 @@ macro (struct mips_cl_insn *ip) macro_build (&offset_expr, (dbl || HAVE_64BIT_ADDRESSES) ? "daddiu" : "addiu", "t,r,j", treg, sreg, BFD_RELOC_LO16); - return; + break; } if (!mips_opts.noat && (treg == breg)) @@ -5356,6 +5376,7 @@ macro (struct mips_cl_insn *ip) AT, AT, BFD_RELOC_LO16); macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t", tempreg, tempreg, AT); + used_at = 1; } relax_end (); } @@ -5480,10 +5501,6 @@ macro (struct mips_cl_insn *ip) macro_build (NULL, s, "d,v,t", treg, tempreg, breg); } - - if (!used_at) - return; - break; case M_J_A: @@ -5494,7 +5511,7 @@ macro (struct mips_cl_insn *ip) macro_build (&offset_expr, "j", "a"); else macro_build (&offset_expr, "b", "p"); - return; + break; /* The jal instructions must be handled as macros because when generating PIC code they expand to multi-instruction @@ -5540,7 +5557,7 @@ macro (struct mips_cl_insn *ip) else abort (); - return; + break; case M_JAL_A: if (mips_pic == NO_PIC) @@ -5677,7 +5694,7 @@ macro (struct mips_cl_insn *ip) else abort (); - return; + break; case M_LB_AB: s = "lb"; @@ -5726,7 +5743,7 @@ macro (struct mips_cl_insn *ip) if (mips_opts.arch == CPU_R4650) { as_bad (_("opcode not supported on this processor")); - return; + break; } s = "ldc1"; /* Itbl support may require additional care here. */ @@ -5759,23 +5776,14 @@ macro (struct mips_cl_insn *ip) case M_LWU_AB: s = "lwu"; ld: - /* XXX Why don't we try to use AT for all expansions? */ - if (!mips_opts.noat && (breg == treg || coproc || lr)) + if (breg == treg || coproc || lr) { tempreg = AT; used_at = 1; } - else if (breg == treg - && (offset_expr.X_op != O_constant - || (offset_expr.X_add_number > 0x7fff - || offset_expr.X_add_number < -0x8000))) - { - as_bad(_("load expansion needs $at register")); - } else { tempreg = treg; - used_at = 0; } goto ld_st; case M_SB_AB: @@ -5823,7 +5831,7 @@ macro (struct mips_cl_insn *ip) if (mips_opts.arch == CPU_R4650) { as_bad (_("opcode not supported on this processor")); - return; + break; } s = "sdc1"; coproc = 1; @@ -5845,23 +5853,8 @@ macro (struct mips_cl_insn *ip) case M_SDR_AB: s = "sdr"; st: - if (!mips_opts.noat) - { - tempreg = AT; - used_at = 1; - } - else if (breg == treg - && (offset_expr.X_op != O_constant - || (offset_expr.X_add_number > 0x7fff - || offset_expr.X_add_number < -0x8000))) - { - as_bad(_("store expansion needs $at register")); - } - else - { - tempreg = treg; - used_at = 0; - } + tempreg = AT; + used_at = 1; ld_st: /* Itbl support may require additional care here. */ if (mask == M_LWC1_AB @@ -6025,11 +6018,7 @@ macro (struct mips_cl_insn *ip) macro_build (&offset_expr, s, fmt, treg, BFD_RELOC_LO16, tempreg); } - - if (used_at) - break; - - return; + break; } if (offset_expr.X_op == O_constant @@ -6107,10 +6096,6 @@ macro (struct mips_cl_insn *ip) tempreg, tempreg, breg); macro_build (&offset_expr, s, fmt, treg, BFD_RELOC_MIPS_GOT_OFST, tempreg); - - if (!used_at) - return; - break; } expr1.X_add_number = offset_expr.X_add_number; @@ -6222,23 +6207,21 @@ macro (struct mips_cl_insn *ip) else abort (); - if (!used_at) - return; - break; case M_LI: case M_LI_S: load_register (treg, &imm_expr, 0); - return; + break; case M_DLI: load_register (treg, &imm_expr, 1); - return; + break; case M_LI_SS: if (imm_expr.X_op == O_constant) { + used_at = 1; load_register (AT, &imm_expr, 0); macro_build (NULL, "mtc1", "t,G", AT, treg); break; @@ -6252,7 +6235,7 @@ macro (struct mips_cl_insn *ip) && offset_expr.X_add_number == 0); macro_build (&offset_expr, "lwc1", "T,o(b)", treg, BFD_RELOC_MIPS_LITERAL, mips_gp_register); - return; + break; } case M_LI_D: @@ -6292,7 +6275,7 @@ macro (struct mips_cl_insn *ip) } } } - return; + break; } /* We know that sym is in the .rdata section. First we get the @@ -6300,20 +6283,26 @@ macro (struct mips_cl_insn *ip) if (mips_pic == NO_PIC) { macro_build_lui (&offset_expr, AT); + used_at = 1; } else if (mips_pic == SVR4_PIC) { macro_build (&offset_expr, ADDRESS_LOAD_INSN, "t,o(b)", AT, BFD_RELOC_MIPS_GOT16, mips_gp_register); + used_at = 1; } else abort (); /* Now we load the register(s). */ if (HAVE_64BIT_GPRS) - macro_build (&offset_expr, "ld", "t,o(b)", treg, BFD_RELOC_LO16, AT); + { + used_at = 1; + macro_build (&offset_expr, "ld", "t,o(b)", treg, BFD_RELOC_LO16, AT); + } else { + used_at = 1; macro_build (&offset_expr, "lw", "t,o(b)", treg, BFD_RELOC_LO16, AT); if (treg != RA) { @@ -6334,6 +6323,7 @@ macro (struct mips_cl_insn *ip) OFFSET_EXPR. */ if (imm_expr.X_op == O_constant || imm_expr.X_op == O_big) { + used_at = 1; load_register (AT, &imm_expr, HAVE_64BIT_FPRS); if (HAVE_64BIT_FPRS) { @@ -6364,7 +6354,7 @@ macro (struct mips_cl_insn *ip) { macro_build (&offset_expr, "ldc1", "T,o(b)", treg, BFD_RELOC_MIPS_LITERAL, mips_gp_register); - return; + break; } breg = mips_gp_register; r = BFD_RELOC_MIPS_LITERAL; @@ -6373,6 +6363,7 @@ macro (struct mips_cl_insn *ip) else { assert (strcmp (s, RDATA_SECTION_NAME) == 0); + used_at = 1; if (mips_pic == SVR4_PIC) macro_build (&offset_expr, ADDRESS_LOAD_INSN, "t,o(b)", AT, BFD_RELOC_MIPS_GOT16, mips_gp_register); @@ -6397,7 +6388,7 @@ macro (struct mips_cl_insn *ip) if (mips_opts.arch == CPU_R4650) { as_bad (_("opcode not supported on this processor")); - return; + break; } /* Even on a big endian machine $fn comes before $fn+1. We have to adjust when loading from memory. */ @@ -6411,9 +6402,6 @@ macro (struct mips_cl_insn *ip) offset_expr.X_add_number += 4; macro_build (&offset_expr, "lwc1", "T,o(b)", target_big_endian ? treg : treg + 1, r, breg); - - if (breg != AT) - return; break; case M_L_DAB: @@ -6431,7 +6419,7 @@ macro (struct mips_cl_insn *ip) if (mips_opts.arch == CPU_R4650) { as_bad (_("opcode not supported on this processor")); - return; + break; } /* Itbl support may require additional care here. */ coproc = 1; @@ -6449,7 +6437,7 @@ macro (struct mips_cl_insn *ip) if (mips_opts.arch == CPU_R4650) { as_bad (_("opcode not supported on this processor")); - return; + break; } if (mips_opts.isa != ISA_MIPS1) @@ -6572,6 +6560,7 @@ macro (struct mips_cl_insn *ip) offset_expr.X_op = O_constant; } } + used_at = 1; macro_build_lui (&offset_expr, AT); if (breg != 0) macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t", AT, breg, AT); @@ -6711,9 +6700,6 @@ macro (struct mips_cl_insn *ip) else abort (); - if (!used_at) - return; - break; case M_LD_OB: @@ -6726,7 +6712,7 @@ macro (struct mips_cl_insn *ip) macro_build (&offset_expr, s, "t,o(b)", treg, BFD_RELOC_LO16, breg); offset_expr.X_add_number += 4; macro_build (&offset_expr, s, "t,o(b)", treg + 1, BFD_RELOC_LO16, breg); - return; + break; /* New code added to support COPZ instructions. This code builds table entries out of the macros in mip_opcodes. @@ -6760,11 +6746,11 @@ macro (struct mips_cl_insn *ip) /* For now we just do C (same as Cz). The parameter will be stored in insn_opcode by mips_ip. */ macro_build (NULL, s, "C", ip->insn_opcode); - return; + break; case M_MOVE: move_register (dreg, sreg); - return; + break; #ifdef LOSING_COMPILER default: @@ -6783,13 +6769,13 @@ macro (struct mips_cl_insn *ip) s2 = "cop3"; coproc = ITBL_DECODE_PNUM (immed_expr);; macro_build (&immed_expr, s, "C"); - return; + break; } macro2 (ip); - return; + break; } - if (mips_opts.noat) - as_warn (_("Macro used $at after \".set noat\"")); + if (mips_opts.noat && used_at) + as_bad (_("Macro used $at after \".set noat\"")); } static void @@ -6831,7 +6817,7 @@ macro2 (struct mips_cl_insn *ip) case M_MUL: macro_build (NULL, dbl ? "dmultu" : "multu", "s,t", sreg, treg); macro_build (NULL, "mflo", "d", dreg); - return; + break; case M_DMUL_I: dbl = 1; @@ -6839,6 +6825,7 @@ macro2 (struct mips_cl_insn *ip) /* The MIPS assembler some times generates shifts and adds. I'm not trying to be that fancy. GCC should do this for us anyway. */ + used_at = 1; load_register (AT, &imm_expr, dbl); macro_build (NULL, dbl ? "dmult" : "mult", "s,t", sreg, AT); macro_build (NULL, "mflo", "d", dreg); @@ -6857,6 +6844,7 @@ macro2 (struct mips_cl_insn *ip) mips_emit_delays (TRUE); ++mips_opts.noreorder; mips_any_noreorder = 1; + used_at = 1; if (imm) load_register (AT, &imm_expr, dbl); macro_build (NULL, dbl ? "dmult" : "mult", "s,t", sreg, imm ? AT : treg); @@ -6889,6 +6877,7 @@ macro2 (struct mips_cl_insn *ip) mips_emit_delays (TRUE); ++mips_opts.noreorder; mips_any_noreorder = 1; + used_at = 1; if (imm) load_register (AT, &imm_expr, dbl); macro_build (NULL, dbl ? "dmultu" : "multu", "s,t", @@ -6921,10 +6910,9 @@ macro2 (struct mips_cl_insn *ip) } macro_build (NULL, "dnegu", "d,w", tempreg, treg); macro_build (NULL, "drorv", "d,t,s", dreg, sreg, tempreg); - if (used_at) - break; - return; + break; } + used_at = 1; macro_build (NULL, "dsubu", "d,v,t", AT, 0, treg); macro_build (NULL, "dsrlv", "d,t,s", AT, sreg, AT); macro_build (NULL, "dsllv", "d,t,s", dreg, sreg, treg); @@ -6945,10 +6933,9 @@ macro2 (struct mips_cl_insn *ip) } macro_build (NULL, "negu", "d,w", tempreg, treg); macro_build (NULL, "rorv", "d,t,s", dreg, sreg, tempreg); - if (used_at) - break; - return; + break; } + used_at = 1; macro_build (NULL, "subu", "d,v,t", AT, 0, treg); macro_build (NULL, "srlv", "d,t,s", AT, sreg, AT); macro_build (NULL, "sllv", "d,t,s", dreg, sreg, treg); @@ -6970,16 +6957,17 @@ macro2 (struct mips_cl_insn *ip) macro_build (NULL, "dror32", "d,w,<", dreg, sreg, rot - 32); else macro_build (NULL, "dror", "d,w,<", dreg, sreg, rot); - return; + break; } if (rot == 0) { macro_build (NULL, "dsrl", "d,w,<", dreg, sreg, 0); - return; + break; } l = (rot < 0x20) ? "dsll" : "dsll32"; r = ((0x40 - rot) < 0x20) ? "dsrl" : "dsrl32"; rot &= 0x1f; + used_at = 1; macro_build (NULL, l, "d,w,<", AT, sreg, rot); macro_build (NULL, r, "d,w,<", dreg, sreg, (0x20 - rot) & 0x1f); macro_build (NULL, "or", "d,v,t", dreg, dreg, AT); @@ -6996,13 +6984,14 @@ macro2 (struct mips_cl_insn *ip) if (ISA_HAS_ROR (mips_opts.isa) || CPU_HAS_ROR (mips_opts.arch)) { macro_build (NULL, "ror", "d,w,<", dreg, sreg, (32 - rot) & 0x1f); - return; + break; } if (rot == 0) { macro_build (NULL, "srl", "d,w,<", dreg, sreg, 0); - return; + break; } + used_at = 1; macro_build (NULL, "sll", "d,w,<", AT, sreg, rot); macro_build (NULL, "srl", "d,w,<", dreg, sreg, (0x20 - rot) & 0x1f); macro_build (NULL, "or", "d,v,t", dreg, dreg, AT); @@ -7013,8 +7002,9 @@ macro2 (struct mips_cl_insn *ip) if (ISA_HAS_DROR (mips_opts.isa) || CPU_HAS_DROR (mips_opts.arch)) { macro_build (NULL, "drorv", "d,t,s", dreg, sreg, treg); - return; + break; } + used_at = 1; macro_build (NULL, "dsubu", "d,v,t", AT, 0, treg); macro_build (NULL, "dsllv", "d,t,s", AT, sreg, AT); macro_build (NULL, "dsrlv", "d,t,s", dreg, sreg, treg); @@ -7025,8 +7015,9 @@ macro2 (struct mips_cl_insn *ip) if (ISA_HAS_ROR (mips_opts.isa) || CPU_HAS_ROR (mips_opts.arch)) { macro_build (NULL, "rorv", "d,t,s", dreg, sreg, treg); - return; + break; } + used_at = 1; macro_build (NULL, "subu", "d,v,t", AT, 0, treg); macro_build (NULL, "sllv", "d,t,s", AT, sreg, AT); macro_build (NULL, "srlv", "d,t,s", dreg, sreg, treg); @@ -7047,16 +7038,17 @@ macro2 (struct mips_cl_insn *ip) macro_build (NULL, "dror32", "d,w,<", dreg, sreg, rot - 32); else macro_build (NULL, "dror", "d,w,<", dreg, sreg, rot); - return; + break; } if (rot == 0) { macro_build (NULL, "dsrl", "d,w,<", dreg, sreg, 0); - return; + break; } r = (rot < 0x20) ? "dsrl" : "dsrl32"; l = ((0x40 - rot) < 0x20) ? "dsll" : "dsll32"; rot &= 0x1f; + used_at = 1; macro_build (NULL, r, "d,w,<", AT, sreg, rot); macro_build (NULL, l, "d,w,<", dreg, sreg, (0x20 - rot) & 0x1f); macro_build (NULL, "or", "d,v,t", dreg, dreg, AT); @@ -7073,13 +7065,14 @@ macro2 (struct mips_cl_insn *ip) if (ISA_HAS_ROR (mips_opts.isa) || CPU_HAS_ROR (mips_opts.arch)) { macro_build (NULL, "ror", "d,w,<", dreg, sreg, rot); - return; + break; } if (rot == 0) { macro_build (NULL, "srl", "d,w,<", dreg, sreg, 0); - return; + break; } + used_at = 1; macro_build (NULL, "srl", "d,w,<", AT, sreg, rot); macro_build (NULL, "sll", "d,w,<", dreg, sreg, (0x20 - rot) & 0x1f); macro_build (NULL, "or", "d,v,t", dreg, dreg, AT); @@ -7090,7 +7083,7 @@ macro2 (struct mips_cl_insn *ip) if (mips_opts.arch == CPU_R4650) { as_bad (_("opcode not supported on this processor")); - return; + break; } assert (mips_opts.isa == ISA_MIPS1); /* Even on a big endian machine $fn comes before $fn+1. We have @@ -7100,7 +7093,7 @@ macro2 (struct mips_cl_insn *ip) offset_expr.X_add_number += 4; macro_build (&offset_expr, "swc1", "T,o(b)", target_big_endian ? treg : treg + 1, BFD_RELOC_LO16, breg); - return; + break; case M_SEQ: if (sreg == 0) @@ -7112,20 +7105,20 @@ macro2 (struct mips_cl_insn *ip) macro_build (NULL, "xor", "d,v,t", dreg, sreg, treg); macro_build (&expr1, "sltiu", "t,r,j", dreg, dreg, BFD_RELOC_LO16); } - return; + break; case M_SEQ_I: if (imm_expr.X_op == O_constant && imm_expr.X_add_number == 0) { macro_build (&expr1, "sltiu", "t,r,j", dreg, sreg, BFD_RELOC_LO16); - return; + break; } if (sreg == 0) { as_warn (_("Instruction %s: result is always false"), ip->insn_mo->name); move_register (dreg, 0); - return; + break; } if (imm_expr.X_op == O_constant && imm_expr.X_add_number >= 0 @@ -7148,9 +7141,7 @@ macro2 (struct mips_cl_insn *ip) used_at = 1; } macro_build (&expr1, "sltiu", "t,r,j", dreg, dreg, BFD_RELOC_LO16); - if (used_at) - break; - return; + break; case M_SGE: /* sreg >= treg <==> not (sreg < treg) */ s = "slt"; @@ -7160,7 +7151,7 @@ macro2 (struct mips_cl_insn *ip) sge: macro_build (NULL, s, "d,v,t", dreg, sreg, treg); macro_build (&expr1, "xori", "t,r,i", dreg, dreg, BFD_RELOC_LO16); - return; + break; case M_SGE_I: /* sreg >= I <==> not (sreg < I) */ case M_SGEU_I: @@ -7179,9 +7170,7 @@ macro2 (struct mips_cl_insn *ip) used_at = 1; } macro_build (&expr1, "xori", "t,r,i", dreg, dreg, BFD_RELOC_LO16); - if (used_at) - break; - return; + break; case M_SGT: /* sreg > treg <==> treg < sreg */ s = "slt"; @@ -7190,7 +7179,7 @@ macro2 (struct mips_cl_insn *ip) s = "sltu"; sgt: macro_build (NULL, s, "d,v,t", dreg, treg, sreg); - return; + break; case M_SGT_I: /* sreg > I <==> I < sreg */ s = "slt"; @@ -7198,6 +7187,7 @@ macro2 (struct mips_cl_insn *ip) case M_SGTU_I: s = "sltu"; sgti: + used_at = 1; load_register (AT, &imm_expr, HAVE_64BIT_GPRS); macro_build (NULL, s, "d,v,t", dreg, AT, sreg); break; @@ -7210,7 +7200,7 @@ macro2 (struct mips_cl_insn *ip) sle: macro_build (NULL, s, "d,v,t", dreg, treg, sreg); macro_build (&expr1, "xori", "t,r,i", dreg, dreg, BFD_RELOC_LO16); - return; + break; case M_SLE_I: /* sreg <= I <==> I >= sreg <==> not (I < sreg) */ s = "slt"; @@ -7218,6 +7208,7 @@ macro2 (struct mips_cl_insn *ip) case M_SLEU_I: s = "sltu"; slei: + used_at = 1; load_register (AT, &imm_expr, HAVE_64BIT_GPRS); macro_build (NULL, s, "d,v,t", dreg, AT, sreg); macro_build (&expr1, "xori", "t,r,i", dreg, dreg, BFD_RELOC_LO16); @@ -7229,8 +7220,9 @@ macro2 (struct mips_cl_insn *ip) && imm_expr.X_add_number < 0x8000) { macro_build (&imm_expr, "slti", "t,r,j", dreg, sreg, BFD_RELOC_LO16); - return; + break; } + used_at = 1; load_register (AT, &imm_expr, HAVE_64BIT_GPRS); macro_build (NULL, "slt", "d,v,t", dreg, sreg, AT); break; @@ -7242,8 +7234,9 @@ macro2 (struct mips_cl_insn *ip) { macro_build (&imm_expr, "sltiu", "t,r,j", dreg, sreg, BFD_RELOC_LO16); - return; + break; } + used_at = 1; load_register (AT, &imm_expr, HAVE_64BIT_GPRS); macro_build (NULL, "sltu", "d,v,t", dreg, sreg, AT); break; @@ -7258,13 +7251,13 @@ macro2 (struct mips_cl_insn *ip) macro_build (NULL, "xor", "d,v,t", dreg, sreg, treg); macro_build (NULL, "sltu", "d,v,t", dreg, 0, dreg); } - return; + break; case M_SNE_I: if (imm_expr.X_op == O_constant && imm_expr.X_add_number == 0) { macro_build (NULL, "sltu", "d,v,t", dreg, 0, sreg); - return; + break; } if (sreg == 0) { @@ -7272,7 +7265,7 @@ macro2 (struct mips_cl_insn *ip) ip->insn_mo->name); macro_build (&expr1, HAVE_32BIT_GPRS ? "addiu" : "daddiu", "t,r,j", dreg, 0, BFD_RELOC_LO16); - return; + break; } if (imm_expr.X_op == O_constant && imm_expr.X_add_number >= 0 @@ -7295,9 +7288,7 @@ macro2 (struct mips_cl_insn *ip) used_at = 1; } macro_build (NULL, "sltu", "d,v,t", dreg, 0, dreg); - if (used_at) - break; - return; + break; case M_DSUB_I: dbl = 1; @@ -7309,8 +7300,9 @@ macro2 (struct mips_cl_insn *ip) imm_expr.X_add_number = -imm_expr.X_add_number; macro_build (&imm_expr, dbl ? "daddi" : "addi", "t,r,j", dreg, sreg, BFD_RELOC_LO16); - return; + break; } + used_at = 1; load_register (AT, &imm_expr, dbl); macro_build (NULL, dbl ? "dsub" : "sub", "d,v,t", dreg, sreg, AT); break; @@ -7325,8 +7317,9 @@ macro2 (struct mips_cl_insn *ip) imm_expr.X_add_number = -imm_expr.X_add_number; macro_build (&imm_expr, dbl ? "daddiu" : "addiu", "t,r,j", dreg, sreg, BFD_RELOC_LO16); - return; + break; } + used_at = 1; load_register (AT, &imm_expr, dbl); macro_build (NULL, dbl ? "dsubu" : "subu", "d,v,t", dreg, sreg, AT); break; @@ -7349,6 +7342,7 @@ macro2 (struct mips_cl_insn *ip) case M_TNE_I: s = "tne"; trap: + used_at = 1; load_register (AT, &imm_expr, HAVE_64BIT_GPRS); macro_build (NULL, s, "s,t", sreg, AT); break; @@ -7356,6 +7350,7 @@ macro2 (struct mips_cl_insn *ip) case M_TRUNCWS: case M_TRUNCWD: assert (mips_opts.isa == ISA_MIPS1); + used_at = 1; sreg = (ip->insn_opcode >> 11) & 0x1f; /* floating reg */ dreg = (ip->insn_opcode >> 06) & 0x1f; /* floating reg */ @@ -7388,6 +7383,7 @@ macro2 (struct mips_cl_insn *ip) case M_ULHU: s = "lbu"; ulh: + used_at = 1; if (offset_expr.X_add_number >= 0x7fff) as_bad (_("operand overflow")); if (! target_big_endian) @@ -7417,7 +7413,10 @@ macro2 (struct mips_cl_insn *ip) if (treg != breg) tempreg = treg; else - tempreg = AT; + { + used_at = 1; + tempreg = AT; + } if (! target_big_endian) offset_expr.X_add_number += off; macro_build (&offset_expr, s, "t,o(b)", tempreg, BFD_RELOC_LO16, breg); @@ -7429,7 +7428,7 @@ macro2 (struct mips_cl_insn *ip) /* If necessary, move the result in tempreg the final destination. */ if (treg == tempreg) - return; + break; /* Protect second load's delay slot. */ load_delay_nop (); move_register (treg, tempreg); @@ -7481,6 +7480,7 @@ macro2 (struct mips_cl_insn *ip) break; case M_USH: + used_at = 1; if (offset_expr.X_add_number >= 0x7fff) as_bad (_("operand overflow")); if (target_big_endian) @@ -7514,7 +7514,7 @@ macro2 (struct mips_cl_insn *ip) else offset_expr.X_add_number += off; macro_build (&offset_expr, s2, "t,o(b)", treg, BFD_RELOC_LO16, breg); - return; + break; case M_USD_A: s = "sdl"; @@ -7571,8 +7571,8 @@ macro2 (struct mips_cl_insn *ip) as_bad (_("Macro %s not implemented yet"), ip->insn_mo->name); break; } - if (mips_opts.noat) - as_warn (_("Macro used $at after \".set noat\"")); + if (mips_opts.noat && used_at) + as_bad (_("Macro used $at after \".set noat\"")); } /* Implement macros in mips16 mode. */ @@ -7662,7 +7662,7 @@ mips16_macro (struct mips_cl_insn *ip) case M_MUL: macro_build (NULL, dbl ? "dmultu" : "multu", "x,y", xreg, yreg); macro_build (NULL, "mflo", "x", zreg); - return; + break; case M_DSUBU_I: dbl = 1; diff --git a/gas/testsuite/ChangeLog b/gas/testsuite/ChangeLog index 8ae409361..8e1b1b702 100644 --- a/gas/testsuite/ChangeLog +++ b/gas/testsuite/ChangeLog @@ -1,3 +1,22 @@ +2005-02-18 Thiemo Seufer + + * gas/mips/noat-1.s, gas/mips/noat-1.d, gas/mips/noat-2.s, + gas/mips/noat2.l, gas/mips/noat-3.s, gas/mips/noat-3.l, + gas/mips/noat-4.s, gas/mips/noat-4.l, gas/mips/noat-5.s, + gas/mips/noat-5.l, gas/mips/noat-6.s, gas/mips/noat-6.l, + gas/mips/noat-7.s, gas/mips/noat-7.l: New files, testcases for + .set noat in macro expansions. + * gas/mips/mips.exp: Run new testcases. + * gas/mips/rol-hw.d, gas/mips/rol-hw.l, gas/mips/rol.d, + gas/mips/rol.l, gas/mips/rol.s, gas/mips/rol64-hw.d, + gas/mips/rol64-hw.l, gas/mips/rol64.d, gas/mips/rol64.l, + gas/mips/rol64.s, gas/mips/uld2-eb.d, gas/mips/uld2-el.d, + gas/mips/uld2.l, gas/mips/uld2.s, gas/mips/ulh2-eb.d, + gas/mips/ulh2-el.d, gas/mips/ulh2.l, gas/mips/ulh2.s, + gas/mips/ulw2-eb-ilocks.d, gas/mips/ulw2-eb.d, + gas/mips/ulw2-el-ilocks.d, gas/mips/ulw2-el.d, gas/mips/ulw2.l, + gas/mips/ulw2.s: Don't try to test .set noat. + 2005-02-17 H.J. Lu * gas/ia64/hint.b-err.l: New file. diff --git a/gas/testsuite/gas/mips/mips.exp b/gas/testsuite/gas/mips/mips.exp index 42e0c4b00..2a318f6ea 100644 --- a/gas/testsuite/gas/mips/mips.exp +++ b/gas/testsuite/gas/mips/mips.exp @@ -738,4 +738,12 @@ if { [istarget mips*-*-*] } then { run_dump_test "macro-warn-1-n32" run_dump_test "macro-warn-2-n32" } + + run_dump_test "noat-1" + run_list_test "noat-2" "" + run_list_test "noat-3" "" + run_list_test "noat-4" "" + run_list_test "noat-5" "" + run_list_test "noat-6" "" + run_list_test "noat-7" "" } diff --git a/gas/testsuite/gas/mips/noat-1.d b/gas/testsuite/gas/mips/noat-1.d new file mode 100644 index 000000000..d3b74af53 --- /dev/null +++ b/gas/testsuite/gas/mips/noat-1.d @@ -0,0 +1,15 @@ +#as: -32 +#objdump: -dr + +.*: +file format .*mips + +Disassembly of section \.text: + +00000000 <\.text>: + 0: 8f7b7fff lw k1,32767\(k1\) + 4: 00000000 nop + 8: 8f7b8000 lw k1,-32768\(k1\) + c: 00000000 nop + 10: af7b7fff sw k1,32767\(k1\) + 14: af7b8000 sw k1,-32768\(k1\) + \.\.\. diff --git a/gas/testsuite/gas/mips/noat-1.s b/gas/testsuite/gas/mips/noat-1.s new file mode 100644 index 000000000..d58ac3e65 --- /dev/null +++ b/gas/testsuite/gas/mips/noat-1.s @@ -0,0 +1,7 @@ + .set noat + lw $27, 0x7fff($27) + lw $27, -0x8000($27) + sw $27, 0x7fff($27) + sw $27, -0x8000($27) + + .space 8 diff --git a/gas/testsuite/gas/mips/noat-2.l b/gas/testsuite/gas/mips/noat-2.l new file mode 100644 index 000000000..33402370e --- /dev/null +++ b/gas/testsuite/gas/mips/noat-2.l @@ -0,0 +1,2 @@ +.*\.s: Assembler messages: +.*\.s:2: Error: Macro used \$at after "\.set noat" diff --git a/gas/testsuite/gas/mips/noat-2.s b/gas/testsuite/gas/mips/noat-2.s new file mode 100644 index 000000000..8e1a449d1 --- /dev/null +++ b/gas/testsuite/gas/mips/noat-2.s @@ -0,0 +1,4 @@ + .set noat + lw $27, 0x8000($27) + + .space 8 diff --git a/gas/testsuite/gas/mips/noat-3.l b/gas/testsuite/gas/mips/noat-3.l new file mode 100644 index 000000000..33402370e --- /dev/null +++ b/gas/testsuite/gas/mips/noat-3.l @@ -0,0 +1,2 @@ +.*\.s: Assembler messages: +.*\.s:2: Error: Macro used \$at after "\.set noat" diff --git a/gas/testsuite/gas/mips/noat-3.s b/gas/testsuite/gas/mips/noat-3.s new file mode 100644 index 000000000..dcf1dc0d6 --- /dev/null +++ b/gas/testsuite/gas/mips/noat-3.s @@ -0,0 +1,4 @@ + .set noat + lw $27, -0x8001($27) + + .space 8 diff --git a/gas/testsuite/gas/mips/noat-4.l b/gas/testsuite/gas/mips/noat-4.l new file mode 100644 index 000000000..33402370e --- /dev/null +++ b/gas/testsuite/gas/mips/noat-4.l @@ -0,0 +1,2 @@ +.*\.s: Assembler messages: +.*\.s:2: Error: Macro used \$at after "\.set noat" diff --git a/gas/testsuite/gas/mips/noat-4.s b/gas/testsuite/gas/mips/noat-4.s new file mode 100644 index 000000000..0bb772e41 --- /dev/null +++ b/gas/testsuite/gas/mips/noat-4.s @@ -0,0 +1,4 @@ + .set noat + lw $27, symbol($27) + + .space 8 diff --git a/gas/testsuite/gas/mips/noat-5.l b/gas/testsuite/gas/mips/noat-5.l new file mode 100644 index 000000000..33402370e --- /dev/null +++ b/gas/testsuite/gas/mips/noat-5.l @@ -0,0 +1,2 @@ +.*\.s: Assembler messages: +.*\.s:2: Error: Macro used \$at after "\.set noat" diff --git a/gas/testsuite/gas/mips/noat-5.s b/gas/testsuite/gas/mips/noat-5.s new file mode 100644 index 000000000..9d8404502 --- /dev/null +++ b/gas/testsuite/gas/mips/noat-5.s @@ -0,0 +1,4 @@ + .set noat + sw $27, 0x8000($27) + + .space 8 diff --git a/gas/testsuite/gas/mips/noat-6.l b/gas/testsuite/gas/mips/noat-6.l new file mode 100644 index 000000000..33402370e --- /dev/null +++ b/gas/testsuite/gas/mips/noat-6.l @@ -0,0 +1,2 @@ +.*\.s: Assembler messages: +.*\.s:2: Error: Macro used \$at after "\.set noat" diff --git a/gas/testsuite/gas/mips/noat-6.s b/gas/testsuite/gas/mips/noat-6.s new file mode 100644 index 000000000..5e2c03373 --- /dev/null +++ b/gas/testsuite/gas/mips/noat-6.s @@ -0,0 +1,4 @@ + .set noat + sw $27, -0x8001($27) + + .space 8 diff --git a/gas/testsuite/gas/mips/noat-7.l b/gas/testsuite/gas/mips/noat-7.l new file mode 100644 index 000000000..33402370e --- /dev/null +++ b/gas/testsuite/gas/mips/noat-7.l @@ -0,0 +1,2 @@ +.*\.s: Assembler messages: +.*\.s:2: Error: Macro used \$at after "\.set noat" diff --git a/gas/testsuite/gas/mips/noat-7.s b/gas/testsuite/gas/mips/noat-7.s new file mode 100644 index 000000000..3dc23505f --- /dev/null +++ b/gas/testsuite/gas/mips/noat-7.s @@ -0,0 +1,4 @@ + .set noat + sw $27, symbol($27) + + .space 8 diff --git a/gas/testsuite/gas/mips/rol-hw.d b/gas/testsuite/gas/mips/rol-hw.d index 347c7fb33..6a9b308a0 100644 --- a/gas/testsuite/gas/mips/rol-hw.d +++ b/gas/testsuite/gas/mips/rol-hw.d @@ -1,7 +1,6 @@ #objdump: -dr --prefix-addresses #name: MIPS hardware rol/ror #source: rol.s -#stderr: rol-hw.l #as: -32 # Test the rol and ror macros. diff --git a/gas/testsuite/gas/mips/rol-hw.l b/gas/testsuite/gas/mips/rol-hw.l deleted file mode 100644 index 19a5dc4cc..000000000 --- a/gas/testsuite/gas/mips/rol-hw.l +++ /dev/null @@ -1,2 +0,0 @@ -.*: Assembler messages: -.*:7: Warning: Macro used \$at after "\.set noat" diff --git a/gas/testsuite/gas/mips/rol.d b/gas/testsuite/gas/mips/rol.d index c226777c3..e331b2c50 100644 --- a/gas/testsuite/gas/mips/rol.d +++ b/gas/testsuite/gas/mips/rol.d @@ -1,6 +1,5 @@ #objdump: -dr --prefix-addresses #name: MIPS macro rol/ror -#stderr: rol.l #as: -32 # Test the rol and ror macros. diff --git a/gas/testsuite/gas/mips/rol.l b/gas/testsuite/gas/mips/rol.l deleted file mode 100644 index 441597e70..000000000 --- a/gas/testsuite/gas/mips/rol.l +++ /dev/null @@ -1,13 +0,0 @@ -.*: Assembler messages: -.*:7: Warning: Macro used \$at after "\.set noat" -.*:8: Warning: Macro used \$at after "\.set noat" -.*:9: Warning: Macro used \$at after "\.set noat" -.*:10: Warning: Macro used \$at after "\.set noat" -.*:13: Warning: Macro used \$at after "\.set noat" -.*:14: Warning: Macro used \$at after "\.set noat" -.*:15: Warning: Macro used \$at after "\.set noat" -.*:16: Warning: Macro used \$at after "\.set noat" -.*:20: Warning: Macro used \$at after "\.set noat" -.*:21: Warning: Macro used \$at after "\.set noat" -.*:24: Warning: Macro used \$at after "\.set noat" -.*:25: Warning: Macro used \$at after "\.set noat" diff --git a/gas/testsuite/gas/mips/rol.s b/gas/testsuite/gas/mips/rol.s index 017c002af..97e2b0192 100644 --- a/gas/testsuite/gas/mips/rol.s +++ b/gas/testsuite/gas/mips/rol.s @@ -1,8 +1,5 @@ # Source file used to test the rol and ror macros. - # generate warnings for all uses of AT. - .set noat - foo: rol $4,$5 rol $4,$5,$6 diff --git a/gas/testsuite/gas/mips/rol64-hw.d b/gas/testsuite/gas/mips/rol64-hw.d index a667f5a48..3b34cec66 100644 --- a/gas/testsuite/gas/mips/rol64-hw.d +++ b/gas/testsuite/gas/mips/rol64-hw.d @@ -1,7 +1,6 @@ #objdump: -dr --prefix-addresses #name: MIPS hardware drol/dror #source: rol64.s -#stderr: rol64-hw.l # Test the drol and dror macros. diff --git a/gas/testsuite/gas/mips/rol64-hw.l b/gas/testsuite/gas/mips/rol64-hw.l deleted file mode 100644 index 19a5dc4cc..000000000 --- a/gas/testsuite/gas/mips/rol64-hw.l +++ /dev/null @@ -1,2 +0,0 @@ -.*: Assembler messages: -.*:7: Warning: Macro used \$at after "\.set noat" diff --git a/gas/testsuite/gas/mips/rol64.d b/gas/testsuite/gas/mips/rol64.d index dc2a0b7c0..081a3d8e7 100644 --- a/gas/testsuite/gas/mips/rol64.d +++ b/gas/testsuite/gas/mips/rol64.d @@ -1,6 +1,5 @@ #objdump: -dr --prefix-addresses #name: MIPS macro drol/dror -#stderr: rol64.l # Test the drol and dror macros. diff --git a/gas/testsuite/gas/mips/rol64.l b/gas/testsuite/gas/mips/rol64.l deleted file mode 100644 index 4a4e74c40..000000000 --- a/gas/testsuite/gas/mips/rol64.l +++ /dev/null @@ -1,27 +0,0 @@ -.*: Assembler messages: -.*:7: Warning: Macro used \$at after "\.set noat" -.*:8: Warning: Macro used \$at after "\.set noat" -.*:9: Warning: Macro used \$at after "\.set noat" -.*:11: Warning: Macro used \$at after "\.set noat" -.*:12: Warning: Macro used \$at after "\.set noat" -.*:13: Warning: Macro used \$at after "\.set noat" -.*:14: Warning: Macro used \$at after "\.set noat" -.*:15: Warning: Macro used \$at after "\.set noat" -.*:18: Warning: Macro used \$at after "\.set noat" -.*:19: Warning: Macro used \$at after "\.set noat" -.*:20: Warning: Macro used \$at after "\.set noat" -.*:22: Warning: Macro used \$at after "\.set noat" -.*:23: Warning: Macro used \$at after "\.set noat" -.*:24: Warning: Macro used \$at after "\.set noat" -.*:25: Warning: Macro used \$at after "\.set noat" -.*:26: Warning: Macro used \$at after "\.set noat" -.*:29: Warning: Macro used \$at after "\.set noat" -.*:30: Warning: Macro used \$at after "\.set noat" -.*:31: Warning: Macro used \$at after "\.set noat" -.*:32: Warning: Macro used \$at after "\.set noat" -.*:33: Warning: Macro used \$at after "\.set noat" -.*:35: Warning: Macro used \$at after "\.set noat" -.*:36: Warning: Macro used \$at after "\.set noat" -.*:37: Warning: Macro used \$at after "\.set noat" -.*:38: Warning: Macro used \$at after "\.set noat" -.*:39: Warning: Macro used \$at after "\.set noat" diff --git a/gas/testsuite/gas/mips/rol64.s b/gas/testsuite/gas/mips/rol64.s index 49a571736..3f1136353 100644 --- a/gas/testsuite/gas/mips/rol64.s +++ b/gas/testsuite/gas/mips/rol64.s @@ -1,8 +1,5 @@ # Source file used to test the drol and dror macros. - # generate warnings for all uses of AT. - .set noat - foo: drol $4,$5 drol $4,$5,$6 diff --git a/gas/testsuite/gas/mips/uld2-eb.d b/gas/testsuite/gas/mips/uld2-eb.d index 815da74b4..8a4d37c5d 100644 --- a/gas/testsuite/gas/mips/uld2-eb.d +++ b/gas/testsuite/gas/mips/uld2-eb.d @@ -2,7 +2,6 @@ #objdump: -dr --prefix-addresses --show-raw-insn -M reg-names=numeric #name: uld2 -EB #source: uld2.s -#stderr: uld2.l # Further checks of uld macro. # XXX: note: when 'move' is changed to use 'or' rather than daddu, the diff --git a/gas/testsuite/gas/mips/uld2-el.d b/gas/testsuite/gas/mips/uld2-el.d index 7b0032e0f..e932f353c 100644 --- a/gas/testsuite/gas/mips/uld2-el.d +++ b/gas/testsuite/gas/mips/uld2-el.d @@ -2,7 +2,6 @@ #objdump: -dr --prefix-addresses --show-raw-insn -M reg-names=numeric #name: uld2 -EL #source: uld2.s -#stderr: uld2.l # Further checks of uld macro. # XXX: note: when 'move' is changed to use 'or' rather than daddu, the diff --git a/gas/testsuite/gas/mips/uld2.l b/gas/testsuite/gas/mips/uld2.l deleted file mode 100644 index 1ab29b544..000000000 --- a/gas/testsuite/gas/mips/uld2.l +++ /dev/null @@ -1,3 +0,0 @@ -.*: Assembler messages: -.*:11: Warning: Macro used \$at after "\.set noat" -.*:12: Warning: Macro used \$at after "\.set noat" diff --git a/gas/testsuite/gas/mips/uld2.s b/gas/testsuite/gas/mips/uld2.s index 5b0d99bf6..2156136a2 100644 --- a/gas/testsuite/gas/mips/uld2.s +++ b/gas/testsuite/gas/mips/uld2.s @@ -1,7 +1,5 @@ # Source file used to test the uld macro (harder). - .set noat - .text text_label: diff --git a/gas/testsuite/gas/mips/ulh2-eb.d b/gas/testsuite/gas/mips/ulh2-eb.d index 9c8e84c69..ee73ba8ca 100644 --- a/gas/testsuite/gas/mips/ulh2-eb.d +++ b/gas/testsuite/gas/mips/ulh2-eb.d @@ -2,7 +2,6 @@ #objdump: -dr --prefix-addresses --show-raw-insn -M reg-names=numeric #name: ulh2 -EB #source: ulh2.s -#stderr: ulh2.l # Further checks of ulh/ulhu macros. diff --git a/gas/testsuite/gas/mips/ulh2-el.d b/gas/testsuite/gas/mips/ulh2-el.d index e8e47e8b4..bc61b5d2f 100644 --- a/gas/testsuite/gas/mips/ulh2-el.d +++ b/gas/testsuite/gas/mips/ulh2-el.d @@ -2,7 +2,6 @@ #objdump: -dr --prefix-addresses --show-raw-insn -M reg-names=numeric #name: ulh2 -EL #source: ulh2.s -#stderr: ulh2.l # Further checks of ulh/ulhu macros. diff --git a/gas/testsuite/gas/mips/ulh2.l b/gas/testsuite/gas/mips/ulh2.l deleted file mode 100644 index 4bab36782..000000000 --- a/gas/testsuite/gas/mips/ulh2.l +++ /dev/null @@ -1,9 +0,0 @@ -.*: Assembler messages: -.*:8: Warning: Macro used \$at after "\.set noat" -.*:9: Warning: Macro used \$at after "\.set noat" -.*:11: Warning: Macro used \$at after "\.set noat" -.*:12: Warning: Macro used \$at after "\.set noat" -.*:14: Warning: Macro used \$at after "\.set noat" -.*:15: Warning: Macro used \$at after "\.set noat" -.*:17: Warning: Macro used \$at after "\.set noat" -.*:18: Warning: Macro used \$at after "\.set noat" diff --git a/gas/testsuite/gas/mips/ulh2.s b/gas/testsuite/gas/mips/ulh2.s index 3aa1cff72..0c200904e 100644 --- a/gas/testsuite/gas/mips/ulh2.s +++ b/gas/testsuite/gas/mips/ulh2.s @@ -1,7 +1,5 @@ # Source file used to test the ulh and ulhu macros (harder). - .set noat - .text text_label: diff --git a/gas/testsuite/gas/mips/ulw2-eb-ilocks.d b/gas/testsuite/gas/mips/ulw2-eb-ilocks.d index 83796ef62..f967aa203 100644 --- a/gas/testsuite/gas/mips/ulw2-eb-ilocks.d +++ b/gas/testsuite/gas/mips/ulw2-eb-ilocks.d @@ -2,7 +2,6 @@ #objdump: -dr --prefix-addresses --show-raw-insn -M reg-names=numeric #name: ulw2 -EB interlocked #source: ulw2.s -#stderr: ulw2.l # Further checks of ulw macro. # XXX: note: when 'move' is changed to use 'or' rather than addu/daddu, the diff --git a/gas/testsuite/gas/mips/ulw2-eb.d b/gas/testsuite/gas/mips/ulw2-eb.d index 88839bd48..934136910 100644 --- a/gas/testsuite/gas/mips/ulw2-eb.d +++ b/gas/testsuite/gas/mips/ulw2-eb.d @@ -2,7 +2,6 @@ #objdump: -dr --prefix-addresses --show-raw-insn -M reg-names=numeric #name: ulw2 -EB non-interlocked #source: ulw2.s -#stderr: ulw2.l # Further checks of ulw macro. # XXX: note: when 'move' is changed to use 'or' rather than addu/daddu, the diff --git a/gas/testsuite/gas/mips/ulw2-el-ilocks.d b/gas/testsuite/gas/mips/ulw2-el-ilocks.d index cc96c6201..5e08cef86 100644 --- a/gas/testsuite/gas/mips/ulw2-el-ilocks.d +++ b/gas/testsuite/gas/mips/ulw2-el-ilocks.d @@ -2,7 +2,6 @@ #objdump: -dr --prefix-addresses --show-raw-insn -M reg-names=numeric #name: ulw2 -EL interlocked #source: ulw2.s -#stderr: ulw2.l # Further checks of ulw macro. # XXX: note: when 'move' is changed to use 'or' rather than addu/daddu, the diff --git a/gas/testsuite/gas/mips/ulw2-el.d b/gas/testsuite/gas/mips/ulw2-el.d index 6abd4d042..75bf40803 100644 --- a/gas/testsuite/gas/mips/ulw2-el.d +++ b/gas/testsuite/gas/mips/ulw2-el.d @@ -2,7 +2,6 @@ #objdump: -dr --prefix-addresses --show-raw-insn -M reg-names=numeric #name: ulw2 -EL non-interlocked #source: ulw2.s -#stderr: ulw2.l # Further checks of ulw macro. # XXX: note: when 'move' is changed to use 'or' rather than addu/daddu, the diff --git a/gas/testsuite/gas/mips/ulw2.l b/gas/testsuite/gas/mips/ulw2.l deleted file mode 100644 index 1ab29b544..000000000 --- a/gas/testsuite/gas/mips/ulw2.l +++ /dev/null @@ -1,3 +0,0 @@ -.*: Assembler messages: -.*:11: Warning: Macro used \$at after "\.set noat" -.*:12: Warning: Macro used \$at after "\.set noat" diff --git a/gas/testsuite/gas/mips/ulw2.s b/gas/testsuite/gas/mips/ulw2.s index f4373dc33..3e90a6b3c 100644 --- a/gas/testsuite/gas/mips/ulw2.s +++ b/gas/testsuite/gas/mips/ulw2.s @@ -1,7 +1,5 @@ # Source file used to test the ulw macro (harder). - .set noat - .text text_label: -- 2.11.4.GIT