diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/buildvm_ppc.dasc | 43 |
1 files changed, 38 insertions, 5 deletions
diff --git a/src/buildvm_ppc.dasc b/src/buildvm_ppc.dasc index 47409b03..ce79d67f 100644 --- a/src/buildvm_ppc.dasc +++ b/src/buildvm_ppc.dasc | |||
@@ -1206,7 +1206,7 @@ static void build_subroutines(BuildCtx *ctx) | |||
1206 | |//-- Math library ------------------------------------------------------- | 1206 | |//-- Math library ------------------------------------------------------- |
1207 | | | 1207 | | |
1208 | |.ffunc_n math_abs | 1208 | |.ffunc_n math_abs |
1209 | | NYI | 1209 | | efdabs CRET1, CARG1 |
1210 | | // Fallthrough. | 1210 | | // Fallthrough. |
1211 | | | 1211 | | |
1212 | |->fff_restv: | 1212 | |->fff_restv: |
@@ -1241,12 +1241,30 @@ static void build_subroutines(BuildCtx *ctx) | |||
1241 | | | 1241 | | |
1242 | |.macro math_extern, func | 1242 | |.macro math_extern, func |
1243 | | .ffunc math_ .. func | 1243 | | .ffunc math_ .. func |
1244 | | NYI | 1244 | | cmplwi NARGS8:RC, 8 |
1245 | | evldd CARG2, 0(BASE) | ||
1246 | | blt ->fff_fallback | ||
1247 | | checknum CARG2 | ||
1248 | | evmergehi CARG1, CARG2, CARG2 | ||
1249 | | checkfail ->fff_fallback | ||
1250 | | bl extern func | ||
1251 | | evmergelo CRET1, CRET1, CRET2 | ||
1252 | | b ->fff_restv | ||
1245 | |.endmacro | 1253 | |.endmacro |
1246 | | | 1254 | | |
1247 | |.macro math_extern2, func | 1255 | |.macro math_extern2, func |
1248 | | .ffunc math_ .. func | 1256 | | .ffunc math_ .. func |
1249 | | NYI | 1257 | | cmplwi NARGS8:RC, 16 |
1258 | | evldd CARG2, 0(BASE) | ||
1259 | | evldd CARG4, 8(BASE) | ||
1260 | | blt ->fff_fallback | ||
1261 | | evmergehi CARG1, CARG4, CARG2 | ||
1262 | | checknum CARG1 | ||
1263 | | evmergehi CARG3, CARG4, CARG4 | ||
1264 | | checkanyfail ->fff_fallback | ||
1265 | | bl extern func | ||
1266 | | evmergelo CRET1, CRET1, CRET2 | ||
1267 | | b ->fff_restv | ||
1250 | |.endmacro | 1268 | |.endmacro |
1251 | | | 1269 | | |
1252 | | math_extern floor | 1270 | | math_extern floor |
@@ -1271,7 +1289,9 @@ static void build_subroutines(BuildCtx *ctx) | |||
1271 | | | 1289 | | |
1272 | |->ff_math_deg: | 1290 | |->ff_math_deg: |
1273 | |.ffunc_1 math_rad | 1291 | |.ffunc_1 math_rad |
1274 | | NYI | 1292 | | evldd CARG2, CFUNC:RB->upvalue[0] |
1293 | | efdmul CRET1, CARG1, CARG2 | ||
1294 | | b ->fff_restv | ||
1275 | | | 1295 | | |
1276 | |.ffunc_nn math_ldexp; NYI | 1296 | |.ffunc_nn math_ldexp; NYI |
1277 | |.ffunc_n math_frexp; NYI | 1297 | |.ffunc_n math_frexp; NYI |
@@ -1279,7 +1299,20 @@ static void build_subroutines(BuildCtx *ctx) | |||
1279 | | | 1299 | | |
1280 | |.macro math_minmax, name, cmpop | 1300 | |.macro math_minmax, name, cmpop |
1281 | | .ffunc_1 name | 1301 | | .ffunc_1 name |
1282 | | NYI | 1302 | | checknum CARG1 |
1303 | | li TMP1, 8 | ||
1304 | | checkfail ->fff_fallback | ||
1305 | |1: | ||
1306 | | evlddx CARG2, BASE, TMP1 | ||
1307 | | cmplw cr1, TMP1, NARGS8:RC | ||
1308 | | checknum CARG2 | ||
1309 | | bge cr1, ->fff_restv // Ok, since CRET1 = CARG1. | ||
1310 | | checkfail ->fff_fallback | ||
1311 | | cmpop CARG2, CARG1 | ||
1312 | | addi TMP1, TMP1, 8 | ||
1313 | | crmove 4*cr0+lt, 4*cr0+gt | ||
1314 | | evsel CARG1, CARG2, CARG1 | ||
1315 | | b <1 | ||
1283 | |.endmacro | 1316 | |.endmacro |
1284 | | | 1317 | | |
1285 | | math_minmax math_min, efdtstlt | 1318 | | math_minmax math_min, efdtstlt |