ARM: Fix signed most significant multiply instructions.

This commit is contained in:
Gabe Black
2010-06-02 12:58:06 -05:00
parent 3cff58602a
commit 82614b6f3a

View File

@@ -284,29 +284,33 @@ let {{
''')
buildMult4InstUnCc("smmla", '''Reg0 = resTemp =
((int64_t)(Reg3.ud << 32) +
Reg1.sw * Reg2.sw) >> 32;
(int64_t)Reg1.sw *
(int64_t)Reg2.sw) >> 32;
''')
buildMult4InstUnCc("smmlar", '''Reg0 = resTemp =
((int64_t)(Reg3.ud << 32) +
Reg1.sw * Reg2.sw +
(int64_t)Reg1.sw *
(int64_t)Reg2.sw +
ULL(0x80000000)) >> 32;
''')
buildMult4InstUnCc("smmls", '''Reg0 = resTemp =
((int64_t)(Reg3.ud << 32) -
Reg1.sw * Reg2.sw) >> 32;
(int64_t)Reg1.sw *
(int64_t)Reg2.sw) >> 32;
''')
buildMult4InstUnCc("smmlsr", '''Reg0 = resTemp =
((int64_t)(Reg3.ud << 32) -
Reg1.sw * Reg2.sw +
(int64_t)Reg1.sw *
(int64_t)Reg2.sw +
ULL(0x80000000)) >> 32;
''')
buildMult3InstUnCc("smmul", '''Reg0 = resTemp =
((int64_t)Reg1 *
(int64_t)Reg2) >> 32;
((int64_t)Reg1.sw *
(int64_t)Reg2.sw) >> 32;
''')
buildMult3InstUnCc("smmulr", '''Reg0 = resTemp =
((int64_t)Reg1 *
(int64_t)Reg2 +
((int64_t)Reg1.sw *
(int64_t)Reg2.sw +
ULL(0x80000000)) >> 32;
''')
buildMult3InstCc ("smuad", '''Reg0 = resTemp =