2 #define binary(size, name, op) \
3 MLTON_CODEGEN_STATIC_INLINE \
4 Real##size##_t Real##size##_##name (Real##size##_t r1, Real##size##_t r2) { \
8 #define compare(size, name, op) \
9 MLTON_CODEGEN_STATIC_INLINE \
10 Bool Real##size##_##name (Real##size##_t r1, Real##size##_t r2) { \
14 #define ternary(size, name, op) \
15 MLTON_CODEGEN_STATIC_INLINE \
16 Real##size##_t Real##size##_mul##name (Real##size##_t r1, Real##size##_t r2, Real##size##_t r3) { \
17 return r1 * r2 op r3; \
20 #define unary(size, name, op) \
21 MLTON_CODEGEN_STATIC_INLINE \
22 Real##size##_t Real##size##_##name (Real##size##_t r1) { \
26 #define misaligned(size) \
27 MLTON_CODEGEN_STATIC_INLINE \
28 Real##size##_t Real##size##_fetch (Ref(Real##size##_t) rp) { \
30 memcpy(&r, rp, sizeof(Real##size##_t)); \
33 MLTON_CODEGEN_STATIC_INLINE \
34 void Real##size##_store (Ref(Real##size##_t) rp, Real##size##_t r) { \
35 memcpy(rp, &r, sizeof(Real##size##_t)); \
38 MLTON_CODEGEN_STATIC_INLINE \
39 void Real##size##_move (Ref(Real##size##_t) dst, Ref(Real##size##_t) src) { \
40 memcpy(dst, src, sizeof(Real##size##_t)); \
45 binary(size, add, +) \
46 binary(size, div, /) \
47 binary(size, mul, *) \
48 binary(size, sub, -) \
49 compare(size, equal, ==) \
50 compare(size, le, <=) \
51 compare(size, lt, <) \
52 ternary(size, add, +) \
53 ternary(size, sub, -) \