From 13fc9b5231725c980bab310b0ed2a7189f1fec1f Mon Sep 17 00:00:00 2001 From: Martin Date: Sun, 15 Mar 2015 23:12:57 +0100 Subject: [PATCH] extern(D): Don't reverse parameter order on x86_64. --- std/internal/digest/sha_SSSE3.d | 37 +++++++++++++++++++++++---------- std/math.d | 14 ++++++++----- 2 files changed, 35 insertions(+), 16 deletions(-) diff --git a/std/internal/digest/sha_SSSE3.d b/std/internal/digest/sha_SSSE3.d index 36b2414fc73..f5536133810 100644 --- a/std/internal/digest/sha_SSSE3.d +++ b/std/internal/digest/sha_SSSE3.d @@ -586,8 +586,8 @@ version(USE_SSSE3) { /* * Parameters: - * RSI contains pointer to state - * RDI contains pointer to input buffer + * RDI (Win64: RCX) contains pointer to state + * RSI (Win64: RDX) contains pointer to input buffer * * Stack layout as follows: * +----------------+ @@ -603,15 +603,30 @@ version(USE_SSSE3) * | Wi+Ki | <- RSP * +----------------+ <- 16byte aligned */ - return [// Save registers according to calling convention - "push RBP", - "push RBX", - // Save parameters - "mov "~STATE_PTR~", RSI", //pointer to state - "mov "~BUFFER_PTR~", RDI", //pointer to buffer - // Align stack - "sub RSP, 4*16+8", - ]; + version(Win64) + { + return [// Save registers according to calling convention + "push RBP", + "push RBX", + // Save parameters + "mov "~STATE_PTR~", RCX", //pointer to state + "mov "~BUFFER_PTR~", RDX", //pointer to buffer + // Align stack + "sub RSP, 4*16+8", + ]; + } + else + { + return [// Save registers according to calling convention + "push RBP", + "push RBX", + // Save parameters + "mov "~STATE_PTR~", RDI", //pointer to state + "mov "~BUFFER_PTR~", RSI", //pointer to buffer + // Align stack + "sub RSP, 4*16+8", + ]; + } } } diff --git a/std/math.d b/std/math.d index 0f491ece1e7..b5d192fc0e7 100644 --- a/std/math.d +++ b/std/math.d @@ -1168,8 +1168,8 @@ real atan2(real y, real x) @trusted pure nothrow @nogc { asm pure nothrow @nogc { naked; - fld real ptr [RDX]; // y - fld real ptr [RCX]; // x + fld real ptr [RCX]; // y + fld real ptr [RDX]; // x fpatan; ret; } @@ -2381,12 +2381,16 @@ version (none) { { version (Win64) { + // RCX: pointer to creal result + // RDX: pointer to y asm pure nothrow @nogc { naked; - fld real ptr [ECX]; + fld real ptr [RDX]; // y fsincos; fxch ST(1), ST(0); + fstp real ptr [RCX]; + fstp real ptr 16[RCX]; ret; } } @@ -3582,9 +3586,9 @@ real scalbn(real x, int n) @trusted nothrow @nogc { asm pure nothrow @nogc { naked ; - mov 16[RSP],RCX ; + mov 16[RSP],RDX ; fild word ptr 16[RSP] ; - fld real ptr [RDX] ; + fld real ptr [RCX] ; fscale ; fstp ST(1) ; ret ;