summaryrefslogtreecommitdiff
path: root/rdrand.asm
diff options
context:
space:
mode:
authorJeffrey Walton <noloader@gmail.com>2017-03-07 12:57:47 -0500
committerJeffrey Walton <noloader@gmail.com>2017-03-07 12:57:47 -0500
commitd3bcbc71da27e2157b16418a3d0f15b20db577f0 (patch)
treebe880061a0aef70f5fae4e51624e09a4eb2a08ec /rdrand.asm
parent19df272d906b60b140505930e826a5144bceaabf (diff)
downloadcryptopp-git-d3bcbc71da27e2157b16418a3d0f15b20db577f0.tar.gz
Cutover to fastcall for MASM and X86 (Issue 387)
Fix "target specific option mismatch" under GCC 4.6
Diffstat (limited to 'rdrand.asm')
-rw-r--r--rdrand.asm51
1 files changed, 20 insertions, 31 deletions
diff --git a/rdrand.asm b/rdrand.asm
index 362e1011..5919307f 100644
--- a/rdrand.asm
+++ b/rdrand.asm
@@ -28,9 +28,9 @@ PUBLIC MASM_RDSEED_GenerateBlock
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;; C/C++ Function prototypes
+;; C/C++ Function prototypes (both are fastcall)
;; X86:
-;; extern "C" void MASM_RDRAND_GenerateBlock(byte* ptr, size_t size);
+;; extern "C" void __fastcall MASM_RDRAND_GenerateBlock(byte* ptr, size_t size);
;; X64:
;; extern "C" void __fastcall MASM_RDRAND_GenerateBlock(byte* ptr, size_t size);
@@ -42,6 +42,9 @@ IFDEF _M_X86 ;; Set via the command line
.486
.MODEL FLAT
+ALIAS <@MASM_RDRAND_GenerateBlock@8> = <MASM_RDRAND_GenerateBlock>
+ALIAS <@MASM_RDSEED_GenerateBlock@8> = <MASM_RDSEED_GenerateBlock>
+
ENDIF
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@@ -51,25 +54,19 @@ IFDEF _M_X86 ;; Set via the command line
.CODE
ALIGN 8
-OPTION LANGUAGE:C
OPTION PROLOGUE:NONE
OPTION EPILOGUE:NONE
-;; Caller pushes on stack following CDECL (right to left)
-;; arg1: byte* buffer
-;; arg2: size_t bsize
+;; No need for Load_Arguments due to fastcall
+;; ECX (in): arg1, byte* buffer
+;; EDX (in): arg2, size_t bsize
MASM_RDRAND_GenerateBlock PROC ;; arg1:DWORD, arg2:DWORD
MWSIZE EQU 04h ;; machine word size
- buffer EQU edi
+ buffer EQU ecx
bsize EQU edx
-Load_Arguments:
-
- mov buffer, DWORD PTR [esp+04h] ;; arg1
- mov bsize, DWORD PTR [esp+08h] ;; arg2
-
;; Top of While loop
GenerateBlock_Top:
@@ -148,8 +145,9 @@ ALIGN 16
OPTION PROLOGUE:NONE
OPTION EPILOGUE:NONE
-;; RCX (in): arg1, byte* buffer
-;; RDX (in): arg2, size_t bsize
+;; No need for Load_Arguments due to fastcall
+;; RCX (in): arg1, byte* buffer
+;; RDX (in): arg2, size_t bsize
MASM_RDRAND_GenerateBlock PROC
@@ -157,8 +155,6 @@ MASM_RDRAND_GenerateBlock PROC
buffer EQU rcx
bsize EQU rdx
- ;; No need for Load_Arguments due to fastcall
-
;; Top of While loop
GenerateBlock_Top:
@@ -244,25 +240,19 @@ IFDEF _M_X86 ;; Set via the command line
.CODE
ALIGN 8
-OPTION LANGUAGE:C
OPTION PROLOGUE:NONE
OPTION EPILOGUE:NONE
-;; Caller pushes on stack following CDECL (right to left)
-;; arg1: byte* buffer
-;; arg2: size_t bsize
+;; No need for Load_Arguments due to fastcall
+;; ECX (in): arg1, byte* buffer
+;; EDX (in): arg2, size_t bsize
MASM_RDSEED_GenerateBlock PROC ;; arg1:DWORD, arg2:DWORD
MWSIZE EQU 04h ;; machine word size
- buffer EQU edi
+ buffer EQU ecx
bsize EQU edx
-Load_Arguments:
-
- mov buffer, DWORD PTR [esp+04h] ;; arg1
- mov bsize, DWORD PTR [esp+08h] ;; arg2
-
;; Top of While loop
GenerateBlock_Top:
@@ -341,17 +331,16 @@ ALIGN 16
OPTION PROLOGUE:NONE
OPTION EPILOGUE:NONE
-;; RCX (in): arg1, byte* buffer
-;; RDX (in): arg2, size_t bsize
+;; No need for Load_Arguments due to fastcall
+;; RCX (in): arg1, byte* buffer
+;; RDX (in): arg2, size_t bsize
-MASM_RDSEED_GenerateBlock PROC ;; arg1:QWORD,arg2:QWORD
+MASM_RDSEED_GenerateBlock PROC ;; arg1:QWORD, arg2:QWORD
MWSIZE EQU 08h ;; machine word size
buffer EQU rcx
bsize EQU rdx
- ;; No need for Load_Arguments due to fastcall
-
;; Top of While loop
GenerateBlock_Top: