[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