win32.S: Use shifting for multiplication rather than repeated addition
authorJosh Triplett <josh@joshtriplett.org>
Fri, 21 Mar 2014 18:01:39 +0000 (11:01 -0700)
committerJosh Triplett <josh@joshtriplett.org>
Fri, 21 Mar 2014 18:02:50 +0000 (11:02 -0700)
The jump table code added a register to itself twice to multiply by 4;
shift the register left by 2 instead.

src/x86/win32.S

index 5ed1221..b455982 100644 (file)
@@ -568,8 +568,7 @@ USCORE_SYMBOL(ffi_call_win32):
        .long   .Lretstruct4b-.Lstore_table     /* FFI_TYPE_SMALL_STRUCT_4B */
        .long   .Lretstruct-.Lstore_table       /* FFI_TYPE_MS_STRUCT */
 1:
-       add     %ecx, %ecx
-       add     %ecx, %ecx
+       shl     $2, %ecx
        add     (%esp),%ecx
        mov     (%ecx),%ecx
        add     (%esp),%ecx
@@ -727,8 +726,7 @@ USCORE_SYMBOL(ffi_closure_SYSV):
        .long   .Lcls_retmsstruct-.Lcls_store_table     /* FFI_TYPE_MS_STRUCT */
 
 1:
-       add     %eax, %eax
-       add     %eax, %eax
+       shl     $2, %eax
        add     (%esp),%eax
        mov     (%eax),%eax
        add     (%esp),%eax
@@ -879,8 +877,7 @@ USCORE_SYMBOL(ffi_closure_raw_SYSV):
        .long   .Lrcls_retstruct4-.Lrcls_store_table    /* FFI_TYPE_SMALL_STRUCT_4B */
        .long   .Lrcls_retstruct-.Lrcls_store_table     /* FFI_TYPE_MS_STRUCT */
 1:
-       add     %eax, %eax
-       add     %eax, %eax
+       shl     $2, %eax
        add     (%esp),%eax
        mov     (%eax),%eax
        add     (%esp),%eax
@@ -1005,8 +1002,7 @@ USCORE_SYMBOL(ffi_closure_STDCALL):
        .long   .Lscls_retstruct2-.Lscls_store_table    /* FFI_TYPE_SMALL_STRUCT_2B */
        .long   .Lscls_retstruct4-.Lscls_store_table    /* FFI_TYPE_SMALL_STRUCT_4B */
 1:
-       add     %eax, %eax
-       add     %eax, %eax
+       shl     $2, %eax
        add     (%esp),%eax
        mov     (%eax),%eax
        add     (%esp),%eax