@@ -21,6 +21,14 @@ void writeI53ToI64_int64(int64_t *heapAddress, int64_t num) {
21
21
#endif
22
22
}
23
23
24
+ void writeI53ToI64_uint64 (uint64_t * heapAddress , uint64_t num ) {
25
+ #ifdef GENERATE_ANSWERS
26
+ * heapAddress = num ;
27
+ #else
28
+ EM_ASM (writeI53ToI64 ($0 , $1 ), heapAddress , (double )num );
29
+ #endif
30
+ }
31
+
24
32
void writeI53ToI64_double (int64_t * heapAddress , double num ) {
25
33
#ifdef GENERATE_ANSWERS
26
34
if (num > 0 || num <= -9223372036854775808.0 /* underflow, garbage in-garbage out situation: just produce a value that matches current JS impl*/ )
@@ -119,6 +127,14 @@ int64_t readI53FromU64_toInt64(uint64_t *heapAddress) {
119
127
#endif
120
128
}
121
129
130
+ uint64_t readI53FromU64_toUInt64 (uint64_t * heapAddress ) {
131
+ #ifdef GENERATE_ANSWERS
132
+ return (uint64_t )* heapAddress ;
133
+ #else
134
+ return (uint64_t )EM_ASM_DOUBLE (return readI53FromU64 ($0 ), heapAddress );
135
+ #endif
136
+ }
137
+
122
138
double readI53FromU64 (uint64_t * heapAddress ) {
123
139
#ifdef GENERATE_ANSWERS
124
140
return (double )* heapAddress ;
@@ -137,13 +153,13 @@ int64_t convertI32PairToI53(int32_t lo, int32_t hi) {
137
153
#endif
138
154
}
139
155
140
- int64_t convertU32PairToI53 (uint32_t lo , uint32_t hi ) {
156
+ uint64_t convertU32PairToI53 (uint32_t lo , uint32_t hi ) {
141
157
#ifdef GENERATE_ANSWERS
142
158
uint64_t val = (uint32_t )lo ;
143
159
val |= ((uint64_t )(uint32_t )hi ) << 32 ;
144
160
return val ;
145
161
#else
146
- return (int64_t )EM_ASM_DOUBLE (return convertU32PairToI53 ($0 , $1 ), lo , hi );
162
+ return (uint64_t )EM_ASM_DOUBLE (return convertU32PairToI53 ($0 , $1 ), lo , hi );
147
163
#endif
148
164
}
149
165
@@ -154,7 +170,7 @@ int64_t testconvertI32PairToI53(int64_t val) {
154
170
return convertI32PairToI53 (lo , hi );
155
171
}
156
172
157
- int64_t testconvertU32PairToI53 (uint64_t val ) {
173
+ uint64_t testconvertU32PairToI53 (uint64_t val ) {
158
174
uint32_t lo = (uint32_t )val ;
159
175
uint32_t hi = val >> 32 ;
160
176
return convertU32PairToI53 (lo , hi );
@@ -174,8 +190,8 @@ int64_t testReadWriteI64AsI53(int64_t num) {
174
190
175
191
uint64_t testReadWriteU64AsI53 (uint64_t num ) {
176
192
uint64_t addr = 0 ;
177
- writeI53ToI64_int64 (( int64_t * )& addr , num );
178
- return readI53FromU64_toInt64 (& addr );
193
+ writeI53ToI64_uint64 (( uint64_t * )& addr , num );
194
+ return readI53FromU64_toUInt64 (& addr );
179
195
}
180
196
181
197
int main () {
0 commit comments