-static void ao_umul64_32_32(ao_int64_t *r, uint32_t a, uint32_t b)
-{
- uint32_t r1;
- uint32_t r2, r3, r4;
- ao_int64_t s,t,u,v;
- r1 = (uint32_t) (uint16_t) a * (uint16_t) b;
- r2 = (uint32_t) (uint16_t) (a >> 16) * (uint16_t) b;
- r3 = (uint32_t) (uint16_t) a * (uint16_t) (b >> 16);
- r4 = (uint32_t) (uint16_t) (a >> 16) * (uint16_t) (b >> 16);
-
- s.low = r1;
- s.high = r4;
-
- t.high = r2 >> 16;
- t.low = r2 << 16;
- ao_plus64(&u, &s, &t);
-
- v.high = r3 >> 16;
- v.low = r3 << 16;
- ao_plus64(r, &u, &v);
+static void ao_umul64_32_32(__ARG ao_int64_t *r, uint32_t a, uint32_t b) __reentrant {
+ __LOCAL uint32_t s;
+ __LOCAL ao_int64_t t;
+ r->low = (uint32_t) (uint16_t) a * (uint16_t) b;
+ r->high = (uint32_t) (uint16_t) (a >> 16) * (uint16_t) (b >> 16);
+
+ s = (uint32_t) (uint16_t) (a >> 16) * (uint16_t) b;
+
+ t.high = s >> 16;
+ t.low = s << 16;
+ ao_plus64(r, r, &t);
+
+ s = (uint32_t) (uint16_t) a * (uint16_t) (b >> 16);
+
+ t.high = s >> 16;
+ t.low = s << 16;
+ ao_plus64(r, r, &t);