103: 104: /*simple Q31 multiplication 105: * no saturation 106: * no rounding 107: */ 108: inline int32_t q_mul_q31_nosat(int32_t a, int32_t b){ 109: int64_t result = (int64_t)a * b; 9D009B6C 8C820000 LW V0, 0(A0) 9D009B70 00021FC3 SRA V1, V0, 31 9D009B74 000537C3 SRA A2, A1, 31 9D009B78 00C20018 MULT 0, A2, V0 9D009B7C 70650000 MADD 0, V1, A1 9D009B80 00003012 MFLO A2 9D009B84 00450019 MULTU 0, V0, A1 9D009B88 00001012 MFLO V0 9D009B8C 00001810 MFHI V1 9D009B90 00C31821 ADDU V1, A2, V1 9D009BA0 8C860008 LW A2, 8(A0) 9D009BA4 00063FC3 SRA A3, A2, 31 9D009BA8 8C820010 LW V0, 16(A0) 9D009BAC 00022FC3 SRA A1, V0, 31 9D009BB0 00A60018 MULT 0, A1, A2 9D009BB4 70E20000 MADD 0, A3, V0 9D009BB8 00002812 MFLO A1 9D009BBC 00C20019 MULTU 0, A2, V0 9D009BC0 00003012 MFLO A2 9D009BC4 00003810 MFHI A3 9D009BC8 00A73821 ADDU A3, A1, A3 9D009BF0 8C820000 LW V0, 0(A0) 9D009BF4 00021FC3 SRA V1, V0, 31 9D009BF8 000537C3 SRA A2, A1, 31 9D009BFC 00C20018 MULT 0, A2, V0 9D009C00 70650000 MADD 0, V1, A1 9D009C04 00003012 MFLO A2 9D009C08 00450019 MULTU 0, V0, A1 9D009C0C 00001012 MFLO V0 9D009C10 00001810 MFHI V1 9D009C14 00C31821 ADDU V1, A2, V1 9D009C24 8C860008 LW A2, 8(A0) 9D009C28 00063FC3 SRA A3, A2, 31 9D009C2C 8C820010 LW V0, 16(A0) 9D009C30 00022FC3 SRA A1, V0, 31 9D009C34 00A60018 MULT 0, A1, A2 9D009C38 70E20000 MADD 0, A3, V0 9D009C3C 00002812 MFLO A1 9D009C40 00C20019 MULTU 0, A2, V0 9D009C44 00003012 MFLO A2 9D009C48 00003810 MFHI A3 9D009C4C 00A73821 ADDU A3, A1, A3 9D009C84 000617C3 SRA V0, A2, 31 9D009C88 70461002 MUL V0, V0, A2 9D009C8C 00021040 SLL V0, V0, 1 9D009C90 00C60019 MULTU 0, A2, A2 9D009C94 00003012 MFLO A2 9D009C98 00003810 MFHI A3 9D009C9C 00473821 ADDU A3, V0, A3 9D009D28 00041FC3 SRA V1, A0, 31 9D009D2C 000517C3 SRA V0, A1, 31 9D009D30 00440018 MULT 0, V0, A0 9D009D34 70650000 MADD 0, V1, A1 9D009D38 00001012 MFLO V0 9D009D3C 00850019 MULTU 0, A0, A1 9D009D40 00002012 MFLO A0 9D009D44 00002810 MFHI A1 9D009D48 00452821 ADDU A1, V0, A1 110: result = result >> 31; 9D009B94 00032840 SLL A1, V1, 1 9D009B98 00021FC2 SRL V1, V0, 31 9D009B9C 00A31825 OR V1, A1, V1 9D009BD4 00072840 SLL A1, A3, 1 9D009BD8 000637C2 SRL A2, A2, 31 9D009BDC 00A63025 OR A2, A1, A2 9D009C18 00032840 SLL A1, V1, 1 9D009C1C 00021FC2 SRL V1, V0, 31 9D009C20 00A31825 OR V1, A1, V1 9D009C58 00072840 SLL A1, A3, 1 9D009C5C 000637C2 SRL A2, A2, 31 9D009C60 00A63025 OR A2, A1, A2 9D009CA0 00072840 SLL A1, A3, 1 9D009CA4 000637C2 SRL A2, A2, 31 9D009D4C 00051040 SLL V0, A1, 1 9D009D50 000427C2 SRL A0, A0, 31 111: return (uint32_t) result; 112: } 9D009D54 03E00008 JR RA 9D009D58 00441025 OR V0, V0, A0 113: