Marge Bot pushed to branch master at Glasgow Haskell Compiler / GHC

Commits:

1 changed file:

Changes:

  • rts/Interpreter.c
    ... ... @@ -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;