[lld] [LLD][X86] Match delayLoad thunk with MSVC (PR #149521)

Evgenii Kudriashov via llvm-commits llvm-commits at lists.llvm.org
Sun Jul 27 16:57:37 PDT 2025


================
@@ -244,40 +244,36 @@ static const uint8_t thunkX64[] = {
 };
 
 static const uint8_t tailMergeX64[] = {
-    0x51,                               // push    rcx
-    0x52,                               // push    rdx
-    0x41, 0x50,                         // push    r8
-    0x41, 0x51,                         // push    r9
-    0x48, 0x83, 0xEC, 0x48,             // sub     rsp, 48h
-    0x66, 0x0F, 0x7F, 0x04, 0x24,       // movdqa  xmmword ptr [rsp], xmm0
-    0x66, 0x0F, 0x7F, 0x4C, 0x24, 0x10, // movdqa  xmmword ptr [rsp+10h], xmm1
-    0x66, 0x0F, 0x7F, 0x54, 0x24, 0x20, // movdqa  xmmword ptr [rsp+20h], xmm2
-    0x66, 0x0F, 0x7F, 0x5C, 0x24, 0x30, // movdqa  xmmword ptr [rsp+30h], xmm3
-    0x48, 0x8B, 0xD0,                   // mov     rdx, rax
-    0x48, 0x8D, 0x0D, 0, 0, 0, 0,       // lea     rcx, [___DELAY_IMPORT_...]
-    0xE8, 0, 0, 0, 0,                   // call    __delayLoadHelper2
-    0x66, 0x0F, 0x6F, 0x04, 0x24,       // movdqa  xmm0, xmmword ptr [rsp]
-    0x66, 0x0F, 0x6F, 0x4C, 0x24, 0x10, // movdqa  xmm1, xmmword ptr [rsp+10h]
-    0x66, 0x0F, 0x6F, 0x54, 0x24, 0x20, // movdqa  xmm2, xmmword ptr [rsp+20h]
-    0x66, 0x0F, 0x6F, 0x5C, 0x24, 0x30, // movdqa  xmm3, xmmword ptr [rsp+30h]
-    0x48, 0x83, 0xC4, 0x48,             // add     rsp, 48h
-    0x41, 0x59,                         // pop     r9
-    0x41, 0x58,                         // pop     r8
-    0x5A,                               // pop     rdx
-    0x59,                               // pop     rcx
-    0xFF, 0xE0,                         // jmp     rax
+    0x48, 0x89, 0x4C, 0x24, 0x08,             // mov     qword ptr [rsp+8], rcx
+    0x48, 0x89, 0x54, 0x24, 0x10,             // mov     qword ptr [rsp+10h], rdx
+    0x4C, 0x89, 0x44, 0x24, 0x18,             // mov     qword ptr [rsp+18h], r8
+    0x4C, 0x89, 0x4C, 0x24, 0x20,             // mov     qword ptr [rsp+20h], r9
+    0x48, 0x83, 0xEC, 0x68,                   // sub     rsp, 68h
+    0x66, 0x0F, 0x7F, 0x44, 0x24, 0x20,       // movdqa  xmmword ptr [rsp+20h], xmm0
+    0x66, 0x0F, 0x7F, 0x4C, 0x24, 0x30,       // movdqa  xmmword ptr [rsp+30h], xmm1
+    0x66, 0x0F, 0x7F, 0x54, 0x24, 0x40,       // movdqa  xmmword ptr [rsp+40h], xmm2
+    0x66, 0x0F, 0x7F, 0x5C, 0x24, 0x50,       // movdqa  xmmword ptr [rsp+50h], xmm3
+    0x48, 0x8B, 0xD0,                         // mov     rdx, rax
+    0x48, 0x8D, 0x0D, 0, 0, 0, 0,             // lea     rcx, [___DELAY_IMPORT_...]
+    0xE8, 0, 0, 0, 0,                         // call    __delayLoadHelper2
+    0x66, 0x0F, 0x6F, 0x44, 0x24, 0x20,       // movdqa  xmm0, xmmword ptr [rsp+20h]
+    0x66, 0x0F, 0x6F, 0x4C, 0x24, 0x30,       // movdqa  xmm1, xmmword ptr [rsp+30h]
+    0x66, 0x0F, 0x6F, 0x54, 0x24, 0x40,       // movdqa  xmm2, xmmword ptr [rsp+40h]
+    0x66, 0x0F, 0x6F, 0x5C, 0x24, 0x50,       // movdqa  xmm3, xmmword ptr [rsp+50h]
+    0x48, 0x8B, 0x4C, 0x24, 0x70,             // mov     rcx, qword ptr [rsp+70h]
+    0x48, 0x8B, 0x54, 0x24, 0x78,             // mov     rdx, qword ptr [rsp+78h]
+    0x4C, 0x8B, 0x84, 0x24, 0x80, 00, 00, 00, // mov     r8, qword ptr [rsp+80h]
----------------
e-kud wrote:

Thanks! This and an extra space after opcodes helped to fit it into 80 chars.

https://github.com/llvm/llvm-project/pull/149521


More information about the llvm-commits mailing list