#***** # # Michael Riff # Multiprecision addition version 1.0 Februar 2022. # 128 bits addition. # #****/ dialect PowerPC file 'lib_128.s' # Only the sections can be exported (dos not work with labels) # export Add_128[DS] export .Add_128[PR] => 'add_128' # export Subt_128[DS] export .Subt_128[PR] => 'sub_128' # 128 bit signed & unsigned addition csect Add_128[DS] csect .Add_128[PR] # Reset OFW in XER TBC addis r10,r0,0x3FFF addi r10,r10,0xFFFF mfspr r0,XER and r0,r0,r10 mtspr xer,r0 # mfspr r0,XER # stw r0,0(r6) lwz r12,12(r3) lwz r11,8(r3) lwz r10,4(r3) lwz r3,0(r3) lwz r9,12(r4) lwz r8,8(r4) lwz r7,4(r4) lwz r4,0(r4) addco r9,r9,r12 addeo r8,r8,r11 addeo r7,r7,r10 addeo r10,r3,r4 stw r10,0(r5) stw r7,4(r5) stw r8,8(r5) stw r9,12(r5) # Handle overflow (and carry) mfspr r5,XER andis. r5,r5,0x6000 stw r5,0(r6) blr # 128 bit subtraction abcd - efgh csect Subt_128[DS] csect .Subt_128[PR] # Reset OFW in XER ToDo lwz r12,12(r3) # d lwz r11,8(r3) # c lwz r10,4(r3) # b lwz r3,0(r3) # a # Clear carry bit addic r0,r0,0 lwz r9,12(r4) # h lwz r8,8(r4) # g lwz r7,4(r4) # f lwz r4,0(r4) # e subfc r9,r9,r12 subfe r8,r8,r11 subfe r7,r7,r10 subfe r10,r4,r3 stw r9,12(r5) stw r8,8(r5) stw r7,4(r5) stw r10,0(r5) # Handle overflow ToDo blr