@@ -1387,18 +1387,23 @@ wasm_interp_call_func_bytecode(WASMModuleInstance *module,
1387
1387
/* push exception_tag_index and
1388
1388
* exception values for rethrow */
1389
1389
PUSH_I32 (exception_tag_index );
1390
- word_copy (frame_sp ,
1391
- frame_sp_old
1392
- - cell_num_to_copy ,
1393
- cell_num_to_copy );
1394
- frame_sp += cell_num_to_copy ;
1395
- /* push exception values for catch
1396
- */
1397
- word_copy (frame_sp ,
1398
- frame_sp_old
1399
- - cell_num_to_copy ,
1400
- cell_num_to_copy );
1401
- frame_sp += cell_num_to_copy ;
1390
+ if (cell_num_to_copy > 0 ) {
1391
+ word_copy (
1392
+ frame_sp ,
1393
+ frame_sp_old
1394
+ - cell_num_to_copy ,
1395
+ cell_num_to_copy );
1396
+ frame_sp += cell_num_to_copy ;
1397
+ /* push exception values for
1398
+ * catch
1399
+ */
1400
+ word_copy (
1401
+ frame_sp ,
1402
+ frame_sp_old
1403
+ - cell_num_to_copy ,
1404
+ cell_num_to_copy );
1405
+ frame_sp += cell_num_to_copy ;
1406
+ }
1402
1407
1403
1408
/* advance to handler */
1404
1409
HANDLE_OP_END ();
@@ -1427,11 +1432,13 @@ wasm_interp_call_func_bytecode(WASMModuleInstance *module,
1427
1432
frame_csp -= lookup_depth ;
1428
1433
1429
1434
/* push exception values for catch */
1430
- word_copy (frame_sp ,
1431
- frame_sp_old
1432
- - cell_num_to_copy ,
1433
- cell_num_to_copy );
1434
- frame_sp += cell_num_to_copy ;
1435
+ if (cell_num_to_copy > 0 ) {
1436
+ word_copy (frame_sp ,
1437
+ frame_sp_old
1438
+ - cell_num_to_copy ,
1439
+ cell_num_to_copy );
1440
+ frame_sp += cell_num_to_copy ;
1441
+ }
1435
1442
1436
1443
/* tag_index is already stored in
1437
1444
* exception_tag_index */
@@ -1452,11 +1459,13 @@ wasm_interp_call_func_bytecode(WASMModuleInstance *module,
1452
1459
/* push exception_tag_index and
1453
1460
* exception values for rethrow */
1454
1461
PUSH_I32 (exception_tag_index );
1455
- word_copy (frame_sp ,
1456
- frame_sp_old
1457
- - cell_num_to_copy ,
1458
- cell_num_to_copy );
1459
- frame_sp += cell_num_to_copy ;
1462
+ if (cell_num_to_copy > 0 ) {
1463
+ word_copy (frame_sp ,
1464
+ frame_sp_old
1465
+ - cell_num_to_copy ,
1466
+ cell_num_to_copy );
1467
+ frame_sp += cell_num_to_copy ;
1468
+ }
1460
1469
/* catch_all has no exception values */
1461
1470
1462
1471
/* advance to handler */
@@ -1483,10 +1492,12 @@ wasm_interp_call_func_bytecode(WASMModuleInstance *module,
1483
1492
* The values are copied to the CALLER FRAME
1484
1493
* (prev_frame->sp) same behvior ad WASM_OP_RETURN
1485
1494
*/
1486
- word_copy (prev_frame -> sp ,
1487
- frame_sp_old - cell_num_to_copy ,
1488
- cell_num_to_copy );
1489
- prev_frame -> sp += cell_num_to_copy ;
1495
+ if (cell_num_to_copy > 0 ) {
1496
+ word_copy (prev_frame -> sp ,
1497
+ frame_sp_old - cell_num_to_copy ,
1498
+ cell_num_to_copy );
1499
+ prev_frame -> sp += cell_num_to_copy ;
1500
+ }
1490
1501
* ((int32 * )(prev_frame -> sp )) = exception_tag_index ;
1491
1502
prev_frame -> sp ++ ;
1492
1503
0 commit comments