• Damien George's avatar
    py/emitnative: Access qstr values using indirection table qstr_table. · d4d53e9e
    Damien George authored
    
    
    This changes the native emitter to access qstr values using the qstr
    indirection table qstr_table, but only when generating native code that
    will be saved to a .mpy file.  This makes the resulting native code fully
    static, ie it does not require any fix-ups or rewriting when it is
    imported.
    
    The performance of native code is more or less unchanged.  Benchmark
    results on PYBv1.0 (using --via-mpy and --emit native) are:
    
    N=100 M=100          baseline -> this-commit     diff      diff% (error%)
    bm_chaos.py            407.16 ->     411.85 :   +4.69 =  +1.152% (+/-0.01%)
    bm_fannkuch.py         100.89 ->     101.20 :   +0.31 =  +0.307% (+/-0.01%)
    bm_fft.py             3521.17 ->    3441.72 :  -79.45 =  -2.256% (+/-0.00%)
    bm_float.py           6707.29 ->    6644.83 :  -62.46 =  -0.931% (+/-0.00%)
    bm_hexiom.py            55.91 ->      55.41 :   -0.50 =  -0.894% (+/-0.00%)
    bm_nqueens.py         5343.54 ->    5326.17 :  -17.37 =  -0.325% (+/-0.00%)
    bm_pidigits.py         603.89 ->     632.79 :  +28.90 =  +4.786% (+/-0.33%)
    core_qstr.py            64.18 ->      64.09 :   -0.09 =  -0.140% (+/-0.01%)
    core_yield_from.py     313.61 ->     311.11 :   -2.50 =  -0.797% (+/-0.03%)
    misc_aes.py            654.29 ->     659.75 :   +5.46 =  +0.834% (+/-0.02%)
    misc_mandel.py        4205.10 ->    4272.08 :  +66.98 =  +1.593% (+/-0.01%)
    misc_pystone.py       3077.79 ->    3128.39 :  +50.60 =  +1.644% (+/-0.01%)
    misc_raytrace.py       388.45 ->     393.71 :   +5.26 =  +1.354% (+/-0.01%)
    viper_call0.py         576.83 ->     566.76 :  -10.07 =  -1.746% (+/-0.05%)
    viper_call1a.py        550.39 ->     540.12 :  -10.27 =  -1.866% (+/-0.11%)
    viper_call1b.py        438.32 ->     432.09 :   -6.23 =  -1.421% (+/-0.11%)
    viper_call1c.py        442.96 ->     436.11 :   -6.85 =  -1.546% (+/-0.08%)
    viper_call2a.py        536.31 ->     527.37 :   -8.94 =  -1.667% (+/-0.04%)
    viper_call2b.py        378.99 ->     377.50 :   -1.49 =  -0.393% (+/-0.08%)
    Signed-off-by: default avatarDamien George <damien@micropython.org>
    d4d53e9e
emitglue.h 3.94 KB