| ... |
... |
@@ -473,6 +473,72 @@ void interp_shutdown( void ){ |
|
473
|
473
|
|
|
474
|
474
|
#endif
|
|
475
|
475
|
|
|
|
476
|
+const StgPtr ctoi_tuple_infos[] = {
|
|
|
477
|
+ (StgPtr) &stg_ctoi_t0_info,
|
|
|
478
|
+ (StgPtr) &stg_ctoi_t1_info,
|
|
|
479
|
+ (StgPtr) &stg_ctoi_t2_info,
|
|
|
480
|
+ (StgPtr) &stg_ctoi_t3_info,
|
|
|
481
|
+ (StgPtr) &stg_ctoi_t4_info,
|
|
|
482
|
+ (StgPtr) &stg_ctoi_t5_info,
|
|
|
483
|
+ (StgPtr) &stg_ctoi_t6_info,
|
|
|
484
|
+ (StgPtr) &stg_ctoi_t7_info,
|
|
|
485
|
+ (StgPtr) &stg_ctoi_t8_info,
|
|
|
486
|
+ (StgPtr) &stg_ctoi_t9_info,
|
|
|
487
|
+ (StgPtr) &stg_ctoi_t10_info,
|
|
|
488
|
+ (StgPtr) &stg_ctoi_t11_info,
|
|
|
489
|
+ (StgPtr) &stg_ctoi_t12_info,
|
|
|
490
|
+ (StgPtr) &stg_ctoi_t13_info,
|
|
|
491
|
+ (StgPtr) &stg_ctoi_t14_info,
|
|
|
492
|
+ (StgPtr) &stg_ctoi_t15_info,
|
|
|
493
|
+ (StgPtr) &stg_ctoi_t16_info,
|
|
|
494
|
+ (StgPtr) &stg_ctoi_t17_info,
|
|
|
495
|
+ (StgPtr) &stg_ctoi_t18_info,
|
|
|
496
|
+ (StgPtr) &stg_ctoi_t19_info,
|
|
|
497
|
+ (StgPtr) &stg_ctoi_t20_info,
|
|
|
498
|
+ (StgPtr) &stg_ctoi_t21_info,
|
|
|
499
|
+ (StgPtr) &stg_ctoi_t22_info,
|
|
|
500
|
+ (StgPtr) &stg_ctoi_t23_info,
|
|
|
501
|
+ (StgPtr) &stg_ctoi_t24_info,
|
|
|
502
|
+ (StgPtr) &stg_ctoi_t25_info,
|
|
|
503
|
+ (StgPtr) &stg_ctoi_t26_info,
|
|
|
504
|
+ (StgPtr) &stg_ctoi_t27_info,
|
|
|
505
|
+ (StgPtr) &stg_ctoi_t28_info,
|
|
|
506
|
+ (StgPtr) &stg_ctoi_t29_info,
|
|
|
507
|
+ (StgPtr) &stg_ctoi_t30_info,
|
|
|
508
|
+ (StgPtr) &stg_ctoi_t31_info,
|
|
|
509
|
+ (StgPtr) &stg_ctoi_t32_info,
|
|
|
510
|
+ (StgPtr) &stg_ctoi_t33_info,
|
|
|
511
|
+ (StgPtr) &stg_ctoi_t34_info,
|
|
|
512
|
+ (StgPtr) &stg_ctoi_t35_info,
|
|
|
513
|
+ (StgPtr) &stg_ctoi_t36_info,
|
|
|
514
|
+ (StgPtr) &stg_ctoi_t37_info,
|
|
|
515
|
+ (StgPtr) &stg_ctoi_t38_info,
|
|
|
516
|
+ (StgPtr) &stg_ctoi_t39_info,
|
|
|
517
|
+ (StgPtr) &stg_ctoi_t40_info,
|
|
|
518
|
+ (StgPtr) &stg_ctoi_t41_info,
|
|
|
519
|
+ (StgPtr) &stg_ctoi_t42_info,
|
|
|
520
|
+ (StgPtr) &stg_ctoi_t43_info,
|
|
|
521
|
+ (StgPtr) &stg_ctoi_t44_info,
|
|
|
522
|
+ (StgPtr) &stg_ctoi_t45_info,
|
|
|
523
|
+ (StgPtr) &stg_ctoi_t46_info,
|
|
|
524
|
+ (StgPtr) &stg_ctoi_t47_info,
|
|
|
525
|
+ (StgPtr) &stg_ctoi_t48_info,
|
|
|
526
|
+ (StgPtr) &stg_ctoi_t49_info,
|
|
|
527
|
+ (StgPtr) &stg_ctoi_t50_info,
|
|
|
528
|
+ (StgPtr) &stg_ctoi_t51_info,
|
|
|
529
|
+ (StgPtr) &stg_ctoi_t52_info,
|
|
|
530
|
+ (StgPtr) &stg_ctoi_t53_info,
|
|
|
531
|
+ (StgPtr) &stg_ctoi_t54_info,
|
|
|
532
|
+ (StgPtr) &stg_ctoi_t55_info,
|
|
|
533
|
+ (StgPtr) &stg_ctoi_t56_info,
|
|
|
534
|
+ (StgPtr) &stg_ctoi_t57_info,
|
|
|
535
|
+ (StgPtr) &stg_ctoi_t58_info,
|
|
|
536
|
+ (StgPtr) &stg_ctoi_t59_info,
|
|
|
537
|
+ (StgPtr) &stg_ctoi_t60_info,
|
|
|
538
|
+ (StgPtr) &stg_ctoi_t61_info,
|
|
|
539
|
+ (StgPtr) &stg_ctoi_t62_info,
|
|
|
540
|
+};
|
|
|
541
|
+
|
|
476
|
542
|
#if defined(PROFILING)
|
|
477
|
543
|
|
|
478
|
544
|
//
|
| ... |
... |
@@ -1828,82 +1894,11 @@ run_BCO: |
|
1828
|
1894
|
SpW(-1) = BCO_PTR(o_tuple_bco);
|
|
1829
|
1895
|
SpW(-2) = tuple_info;
|
|
1830
|
1896
|
SpW(-3) = BCO_PTR(o_bco);
|
|
1831
|
|
- W_ ctoi_t_offset;
|
|
1832
|
1897
|
int tuple_stack_words = (tuple_info >> 24) & 0xff;
|
|
1833
|
|
- switch(tuple_stack_words) {
|
|
1834
|
|
- case 0: ctoi_t_offset = (W_)&stg_ctoi_t0_info; break;
|
|
1835
|
|
- case 1: ctoi_t_offset = (W_)&stg_ctoi_t1_info; break;
|
|
1836
|
|
- case 2: ctoi_t_offset = (W_)&stg_ctoi_t2_info; break;
|
|
1837
|
|
- case 3: ctoi_t_offset = (W_)&stg_ctoi_t3_info; break;
|
|
1838
|
|
- case 4: ctoi_t_offset = (W_)&stg_ctoi_t4_info; break;
|
|
1839
|
|
- case 5: ctoi_t_offset = (W_)&stg_ctoi_t5_info; break;
|
|
1840
|
|
- case 6: ctoi_t_offset = (W_)&stg_ctoi_t6_info; break;
|
|
1841
|
|
- case 7: ctoi_t_offset = (W_)&stg_ctoi_t7_info; break;
|
|
1842
|
|
- case 8: ctoi_t_offset = (W_)&stg_ctoi_t8_info; break;
|
|
1843
|
|
- case 9: ctoi_t_offset = (W_)&stg_ctoi_t9_info; break;
|
|
1844
|
|
-
|
|
1845
|
|
- case 10: ctoi_t_offset = (W_)&stg_ctoi_t10_info; break;
|
|
1846
|
|
- case 11: ctoi_t_offset = (W_)&stg_ctoi_t11_info; break;
|
|
1847
|
|
- case 12: ctoi_t_offset = (W_)&stg_ctoi_t12_info; break;
|
|
1848
|
|
- case 13: ctoi_t_offset = (W_)&stg_ctoi_t13_info; break;
|
|
1849
|
|
- case 14: ctoi_t_offset = (W_)&stg_ctoi_t14_info; break;
|
|
1850
|
|
- case 15: ctoi_t_offset = (W_)&stg_ctoi_t15_info; break;
|
|
1851
|
|
- case 16: ctoi_t_offset = (W_)&stg_ctoi_t16_info; break;
|
|
1852
|
|
- case 17: ctoi_t_offset = (W_)&stg_ctoi_t17_info; break;
|
|
1853
|
|
- case 18: ctoi_t_offset = (W_)&stg_ctoi_t18_info; break;
|
|
1854
|
|
- case 19: ctoi_t_offset = (W_)&stg_ctoi_t19_info; break;
|
|
1855
|
|
-
|
|
1856
|
|
- case 20: ctoi_t_offset = (W_)&stg_ctoi_t20_info; break;
|
|
1857
|
|
- case 21: ctoi_t_offset = (W_)&stg_ctoi_t21_info; break;
|
|
1858
|
|
- case 22: ctoi_t_offset = (W_)&stg_ctoi_t22_info; break;
|
|
1859
|
|
- case 23: ctoi_t_offset = (W_)&stg_ctoi_t23_info; break;
|
|
1860
|
|
- case 24: ctoi_t_offset = (W_)&stg_ctoi_t24_info; break;
|
|
1861
|
|
- case 25: ctoi_t_offset = (W_)&stg_ctoi_t25_info; break;
|
|
1862
|
|
- case 26: ctoi_t_offset = (W_)&stg_ctoi_t26_info; break;
|
|
1863
|
|
- case 27: ctoi_t_offset = (W_)&stg_ctoi_t27_info; break;
|
|
1864
|
|
- case 28: ctoi_t_offset = (W_)&stg_ctoi_t28_info; break;
|
|
1865
|
|
- case 29: ctoi_t_offset = (W_)&stg_ctoi_t29_info; break;
|
|
1866
|
|
-
|
|
1867
|
|
- case 30: ctoi_t_offset = (W_)&stg_ctoi_t30_info; break;
|
|
1868
|
|
- case 31: ctoi_t_offset = (W_)&stg_ctoi_t31_info; break;
|
|
1869
|
|
- case 32: ctoi_t_offset = (W_)&stg_ctoi_t32_info; break;
|
|
1870
|
|
- case 33: ctoi_t_offset = (W_)&stg_ctoi_t33_info; break;
|
|
1871
|
|
- case 34: ctoi_t_offset = (W_)&stg_ctoi_t34_info; break;
|
|
1872
|
|
- case 35: ctoi_t_offset = (W_)&stg_ctoi_t35_info; break;
|
|
1873
|
|
- case 36: ctoi_t_offset = (W_)&stg_ctoi_t36_info; break;
|
|
1874
|
|
- case 37: ctoi_t_offset = (W_)&stg_ctoi_t37_info; break;
|
|
1875
|
|
- case 38: ctoi_t_offset = (W_)&stg_ctoi_t38_info; break;
|
|
1876
|
|
- case 39: ctoi_t_offset = (W_)&stg_ctoi_t39_info; break;
|
|
1877
|
|
-
|
|
1878
|
|
- case 40: ctoi_t_offset = (W_)&stg_ctoi_t40_info; break;
|
|
1879
|
|
- case 41: ctoi_t_offset = (W_)&stg_ctoi_t41_info; break;
|
|
1880
|
|
- case 42: ctoi_t_offset = (W_)&stg_ctoi_t42_info; break;
|
|
1881
|
|
- case 43: ctoi_t_offset = (W_)&stg_ctoi_t43_info; break;
|
|
1882
|
|
- case 44: ctoi_t_offset = (W_)&stg_ctoi_t44_info; break;
|
|
1883
|
|
- case 45: ctoi_t_offset = (W_)&stg_ctoi_t45_info; break;
|
|
1884
|
|
- case 46: ctoi_t_offset = (W_)&stg_ctoi_t46_info; break;
|
|
1885
|
|
- case 47: ctoi_t_offset = (W_)&stg_ctoi_t47_info; break;
|
|
1886
|
|
- case 48: ctoi_t_offset = (W_)&stg_ctoi_t48_info; break;
|
|
1887
|
|
- case 49: ctoi_t_offset = (W_)&stg_ctoi_t49_info; break;
|
|
1888
|
|
-
|
|
1889
|
|
- case 50: ctoi_t_offset = (W_)&stg_ctoi_t50_info; break;
|
|
1890
|
|
- case 51: ctoi_t_offset = (W_)&stg_ctoi_t51_info; break;
|
|
1891
|
|
- case 52: ctoi_t_offset = (W_)&stg_ctoi_t52_info; break;
|
|
1892
|
|
- case 53: ctoi_t_offset = (W_)&stg_ctoi_t53_info; break;
|
|
1893
|
|
- case 54: ctoi_t_offset = (W_)&stg_ctoi_t54_info; break;
|
|
1894
|
|
- case 55: ctoi_t_offset = (W_)&stg_ctoi_t55_info; break;
|
|
1895
|
|
- case 56: ctoi_t_offset = (W_)&stg_ctoi_t56_info; break;
|
|
1896
|
|
- case 57: ctoi_t_offset = (W_)&stg_ctoi_t57_info; break;
|
|
1897
|
|
- case 58: ctoi_t_offset = (W_)&stg_ctoi_t58_info; break;
|
|
1898
|
|
- case 59: ctoi_t_offset = (W_)&stg_ctoi_t59_info; break;
|
|
1899
|
|
-
|
|
1900
|
|
- case 60: ctoi_t_offset = (W_)&stg_ctoi_t60_info; break;
|
|
1901
|
|
- case 61: ctoi_t_offset = (W_)&stg_ctoi_t61_info; break;
|
|
1902
|
|
- case 62: ctoi_t_offset = (W_)&stg_ctoi_t62_info; break;
|
|
1903
|
|
-
|
|
1904
|
|
- default: barf("unsupported tuple size %d", tuple_stack_words);
|
|
|
1898
|
+ if (tuple_stack_words > 62) {
|
|
|
1899
|
+ barf("unsupported tuple size %d", tuple_stack_words);
|
|
1905
|
1900
|
}
|
|
1906
|
|
-
|
|
|
1901
|
+ W_ ctoi_t_offset = (W_) ctoi_tuple_infos[tuple_stack_words];
|
|
1907
|
1902
|
SpW(-4) = ctoi_t_offset;
|
|
1908
|
1903
|
Sp_subW(4);
|
|
1909
|
1904
|
goto nextInsn;
|