[llvm] [AArch64] Implement assembler support for new SVE SEH unwind opcodes. (PR #137895)
Eli Friedman via llvm-commits
llvm-commits at lists.llvm.org
Fri May 2 10:12:26 PDT 2025
================
@@ -640,6 +645,37 @@ static void ARM64EmitUnwindCode(MCStreamer &streamer,
streamer.emitInt8(b);
break;
}
+ case Win64EH::UOP_AllocZ: {
+ b = 0xDF;
+ streamer.emitInt8(b);
+ b = inst.Offset;
+ streamer.emitInt8(b);
+ break;
+ }
+ case Win64EH::UOP_SaveZReg: {
+ assert(inst.Register >= 8 && inst.Register <= 23);
+ assert(inst.Offset < 256);
+ b = 0xE7;
+ streamer.emitInt8(b);
+ reg = inst.Register - 8;
+ b = ((inst.Offset & 0xC0) >> 1) | reg;
+ streamer.emitInt8(b);
+ b = 0xC0 | (inst.Offset & 0x3F);
+ streamer.emitInt8(b);
+ break;
+ }
+ case Win64EH::UOP_SavePReg: {
+ assert(inst.Register >= 4 && inst.Register <= 15);
+ assert(inst.Offset < 256);
+ b = 0xE7;
+ streamer.emitInt8(b);
+ reg = inst.Register - 4;
----------------
efriedma-quic wrote:
Pushed update to remove the "-4". I guess I kind of assumed there was a subtraction for p-regs because there was a subtraction for z-regs, and didn't get around to verifying it.
https://github.com/llvm/llvm-project/pull/137895
More information about the llvm-commits
mailing list