@@ -363,59 +363,59 @@ private
363363 else version (AsmAArch64_Windows)
364364 {
365365 pragma (LDC_never_inline);
366- __asm(
366+ asm pure nothrow @nogc
367+ {
367368 ` // save current stack state (similar to posix version in threadasm.S)
368- stp x19, x20, [sp, #-16]!
369- stp x21, x22, [sp, #-16]!
370- stp x23, x24, [sp, #-16]!
371- stp x25, x26, [sp, #-16]!
372- stp x27, x28, [sp, #-16]!
373- stp fp, lr, [sp, #-16]!
374- mov x19, sp // no need to scan FP registers, so snapshot sp here
375-
376- stp d8, d9, [sp, #-16]!
377- stp d10, d11, [sp, #-16]!
378- stp d12, d13, [sp, #-16]!
379- stp d14, d15, [sp, #-16]!
380-
381- ldr x20, [x18, #8] // read stack range from TEB
382- ldr x21, [x18, #16]
383- stp x20, x21, [sp, #-16]!
384-
385- ldr x20, [x18, #0x1478] // read Deallocation Stack
386- ldr w21, [x18, #0x1748] // read GuaranteedStackBytes
387- stp x20, x21, [sp, #-16]!
369+ stp x19, x20, [sp, #-16]!;
370+ stp x21, x22, [sp, #-16]!;
371+ stp x23, x24, [sp, #-16]!;
372+ stp x25, x26, [sp, #-16]!;
373+ stp x27, x28, [sp, #-16]!;
374+ stp fp, lr, [sp, #-16]!;
375+ mov x19, sp; // no need to scan FP registers, so snapshot sp here
376+
377+ stp d8, d9, [sp, #-16]!;
378+ stp d10, d11, [sp, #-16]!;
379+ stp d12, d13, [sp, #-16]!;
380+ stp d14, d15, [sp, #-16]!;
381+
382+ ldr x20, [x18, #8]; // read stack range from TEB
383+ ldr x21, [x18, #16];
384+ stp x20, x21, [sp, #-16]!;
385+
386+ ldr x20, [x18, #0x1478]; // read Deallocation Stack
387+ ldr w21, [x18, #0x1748]; // read GuaranteedStackBytes
388+ stp x20, x21, [sp, #-16]!;
388389
389390 // store oldp
390- str x19, [x0]
391+ str x19, [x0];
391392 // load newp to begin context switch
392- sub x1, x1, #6*16
393- mov sp, x1
393+ sub x1, x1, #6*16;
394+ mov sp, x1;
394395
395- ldp x20, x21, [sp], #16 // restore Deallocation/GuaranteedStackBytes
396- str x20, [x18, #0x1478]
397- str w21, [x18, #0x1748] // word only
396+ ldp x20, x21, [sp], #16; // restore Deallocation/GuaranteedStackBytes
397+ str x20, [x18, #0x1478];
398+ str w21, [x18, #0x1748]; // word only
398399
399- ldp x20, x21, [sp], #16 // restore stack range
400- str x20, [x18, #8]
401- str x21, [x18, #16]
400+ ldp x20, x21, [sp], #16; // restore stack range
401+ str x20, [x18, #8];
402+ str x21, [x18, #16];
402403
403404 // load saved state from new stack
404- ldp d14, d15, [sp], #16
405- ldp d12, d13, [sp], #16
406- ldp d10, d11, [sp], #16
407- ldp d8, d9, [sp], #16
408-
409- ldp fp, lr, [sp], #16
410- ldp x27, x28, [sp], #16
411- ldp x25, x26, [sp], #16
412- ldp x23, x24, [sp], #16
413- ldp x21, x22, [sp], #16
414- ldp x19, x20, [sp], #16
415-
416- ret` ,
417- " "
418- );
405+ ldp d14, d15, [sp], #16;
406+ ldp d12, d13, [sp], #16;
407+ ldp d10, d11, [sp], #16;
408+ ldp d8, d9, [sp], #16;
409+
410+ ldp fp, lr, [sp], #16;
411+ ldp x27, x28, [sp], #16;
412+ ldp x25, x26, [sp], #16;
413+ ldp x23, x24, [sp], #16;
414+ ldp x21, x22, [sp], #16;
415+ ldp x19, x20, [sp], #16;
416+
417+ ret;` ;
418+ }
419419 }
420420 else
421421 static assert (false );
0 commit comments