(save_static_to_mem3): Likewise.
(save_static_to_mem4): Likewise.
(save_static_to_mem5): Likewise.
(save_static_to_scratch): Save f4 to f6 to improve test coverage.
(Logical change 1.185)
directives specify physical stacked register numbers and
the register-backing store always represents physical
registers, so it was wrong to rotate here.
(Logical change 1.184)
registers are passed via macro args.
(CALL_NEXT): Define in terms of CALL_NEXT_PTR().
(rotate_regs): Fix it so it doesn't overwrite any local registers
once they are rotated. Note: it's OK to write the output
registers, since those are outside of the rotating partition.
(Logical change 1.184)
The previous version was OK for all but one corner case.
The new version uses slightly more space in the cursor
(4 extra bytes) but on the other hand, the final result is
both much more easier to understand and likely faster.
It also seems more correct, which is always a bonus.
BKrev: 403f05c1TMcVYiNdYmb4S5hSOVJkfw
Adjust NaT-bit handling. Much simpler now.
Pass NULL as new third argument to ia64_scratch_loc().
Set save_loc->extra.nat_bitnr to the NaT bit number (or 0
when not accessing a NaT bit).
(Logical change 1.181)
Handle NaT-bit registers by returning not just the
NaT-word address, but also the NaT-bit number.
(hpux_scratch_loc): Add "nat_bitnr"-pointer argument.
(ia64_scratch_loc): Likewise.
(access_nat): Add "nat_bitnr" argument. Rename "loc" to "nat_loc".
Greatly simplify now that we have the NaT-word and the
NaT bit-number readily available.
(access_reg): Pass NaT-bit number to access_nat().
Handle scratch NaT-bit registers in a more generic fashion,
now that we can. Adjust all calls to ia64_scratch_loc() for
third argument.
(Logical change 1.181)
Added operations IA64_INSN_ADD_PSP_NAT, IA64_INSN_ADD_SP_NAT,
IA64_INSN_MOVE_NAT, IA64_INSN_MOVE_NO_NAT,
IA64_INSN_MOVE_STACKED_NAT, IA64_INSN_MOVE_STACKED_NAT,
IA64_INSN_MOVE_SCRATCH_NAT, and IA64_INSN_MOVE_SCRATCH_NO_NAT.
(emit_nat_info): Remove---it's no longer needed.
(compile_reg): Emit special op-codes when compiling a preserved
static register, such that it's NaT-info can be updated.
(set_nat_info): New function.
(run_script): Implement new script instructions.
(Logical change 1.181)
(build_script): Adjust for extra argument to compile_reg().
Fix the primary-NaT compilation such that it always
updates IA64_REGPRI_UNAT_MEM.
(run_script): For IA64_INSN_SETNET_MEMSTK, set the location based on
IA64_REG_PRI_UNAT_MEM and don't forget to turn on the
MEMSTK_NAT bit.
(Logical change 1.178)
(save_static_to_fr): Rename from save_static_to_fpreg().
(check_static_to_fr): Rename from check_static_to_fpreg().
(save_static_to_br): Declare.
(check_static_to_br): New function.
(save_static_to_mem): Declare.
(check_static_to_mem): New function.
(all_funcs): Mention new save/checks.
(Logical change 1.175)
(save_static_to_stacked): Use LOAD_VAL.
(save_static_to_fr): Rename from save_static_to_fpreg().
(save_static_to_br): New function.
(save_static_to_mem): Likewise.
(Logical change 1.175)
to a stacked register. We can't use ia64_get_stacked() here because
c->rbs will, in general, be different from the frame in which the
register was saved.
(Logical change 1.173)