; 32-bit by 32-bit multiplication routine for use with C AREA |mul64$$code|, CODE, READONLY |x$codeseg| EXPORT mul64 ; On entry a1 and a2 contain the 32-bit integers to be multiplied (a, b) ; On exit a1 and a2 contain the result (a1 bits 0-31, a2 bits 32-63) mul64 MOV ip, a1, LSR #16 ; MOV a4, a2, LSR #16 ; BIC a1, a1, ip, LSL #16 ; BIC a2, a2, a4, LSL #16 ; MUL a3, a1, a2 ; MUL a2, ip, a2 ; MUL a1, a4, a1 ; MUL a4, ip, a4 ; ADDS ip, a2, a1 ; ADDCC a4, a4, #&10000 ; ADDS a1, a3, ip, LSL #16 ; ADC a2, a4, ip, LSR #16 ; MOV pc, lr END