This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

Arm7 long multiply in C

Hallo to everyone.

My problem is to have the upper 4 Byte result of a multiply.
For example:

unsigned int a=1000000000;//only example value
unsigned int b=10000000000;
unsigned int c;



the result of a*b = 0x8AC7230489E80000

How to get the upper 4 Bytes:
0x8AC72304
How to get the lower 4 Bytes:
0x89E80000

Can anybody help?
I have to programm a super-fast-interrupt-routine for an microcontroller, there is not enough time for floating point.

Parents
  • Hi,
    here's my solution in Assembler:

    //*********************************************************************
    // A unsigned multiply in ARM Assembler
    // Returns the upper 4 byte of a 32*32-bit-multiplication
    //*********************************************************************
    AREA ?C?bla, CODE, READONLY, ALIGN=2
    
    PUBLIC MUL32x32_ret_upper?A
    MUL32x32_ret_upper?A            PROC CODE32
    
            UMULL   R2,R0,R1,R0     ;R0,R2 := R1*R0
            bx      lr              ; return R0
    
            ENDP
            END
    //*********************************************************************
    

Reply
  • Hi,
    here's my solution in Assembler:

    //*********************************************************************
    // A unsigned multiply in ARM Assembler
    // Returns the upper 4 byte of a 32*32-bit-multiplication
    //*********************************************************************
    AREA ?C?bla, CODE, READONLY, ALIGN=2
    
    PUBLIC MUL32x32_ret_upper?A
    MUL32x32_ret_upper?A            PROC CODE32
    
            UMULL   R2,R0,R1,R0     ;R0,R2 := R1*R0
            bx      lr              ; return R0
    
            ENDP
            END
    //*********************************************************************
    

Children