Ticket #7: 0001-tigcclib-optimize-the-SAVE_SCREEN-implementation-Mar.patch

File 0001-tigcclib-optimize-the-SAVE_SCREEN-implementation-Mar.patch, 11.3 KB (added by debrouxl, 3 years ago)

Optimization of the SAVE_SCREEN implementation

  • trunk/tigcc/archive/startup/Startup.txt

    From 885db0633d42ebe67789cf97d4b71a4fc99e3430 Mon Sep 17 00:00:00 2001
    From: Lionel Debroux <lionel_debroux@yahoo.fr>
    Date: Sun, 21 Jun 2009 11:15:25 +0200
    Subject: tigcclib: optimize the SAVE_SCREEN implementation (Martial Demolins).
    
    ---
     trunk/tigcc/archive/startup/Startup.txt      |    2 +-
     trunk/tigcc/archive/startup/_save_screen.s   |   49 ++++++--------
     trunk/tigcc/archive/startup/_save_screen_1.s |    9 ---
     trunk/tigcc/archive/startup/_save_screen_2.s |    6 --
     trunk/tigcc/archive/tigcc.tpr                |   92 ++++++++++++-------------
     5 files changed, 67 insertions(+), 91 deletions(-)
     delete mode 100644 trunk/tigcc/archive/startup/_save_screen_1.s
     delete mode 100644 trunk/tigcc/archive/startup/_save_screen_2.s
    
    diff --git a/trunk/tigcc/archive/startup/Startup.txt b/trunk/tigcc/archive/startup/Startup.txt
    index 65f51f4..edfdfff 100644
    a b in front of program sections. 
    4343 90        **  | ROM call relocation 
    4444 95-99     **  | Data variable support 
    4545 100       **  | BSS support 
    46  110-112   **  | Screen saving 
     46 110       **  | Screen saving 
    4747 130           | Internal F-Line emulator 
    4848 140           | Error return support 
    4949 150-153       | BSS initialization 
  • trunk/tigcc/archive/startup/_save_screen.s

    diff --git a/trunk/tigcc/archive/startup/_save_screen.s b/trunk/tigcc/archive/startup/_save_screen.s
    index 66dfe64..bf8cd9a 100644
    a b  
    33| This file requires cleanup code. 
    44        .xdef __ref_all___complex_main 
    55 
     6| Screen save & restore used to be done by calling memcpy, even if doing so 
     7| yields an executable 16 bytes larger (though a very tiny fraction of a 
     8| second faster). SAVE_SCREEN is present in most AMS native programs, so its 
     9| implementation should be focused on a low footprint. 
     10| a0 can't be used (see Startup.txt), so a1 is used instead. 
     11 
    612.section _st110 
    713__save_screen: 
    8 | Save %a2 since we may not destroy it when we return to the AMS. 
    9         pea.l (%a2) 
    10 | Get LCD_SIZE bytes on the stack. 
    11         lea.l (%sp,-3840),%sp 
    12 | Push LCD_SIZE (size parameter). 
    13         pea.l 3840 
    14 | Push LCD_MEM (source parameter). 
    15         pea.l 0x4C00 
    16 | Push pointer to the space on the stack (dest parameter). 
    17         pea.l (%sp,8) 
    18  
    19 | Code to load memcpy into %a2 is inserted here. 
    20  
    21 .section _st112 
    22         jsr (%a2) 
     14| Execute the loop LCD_SIZE/4 times (4 bytes are transferred at a time). 
     15        move.w #(3840/4)-1,%d0 
     16| LCD_MEM. 
     17        lea.l 0x4c00.w,%a1 
     18| Push data on the stack. 
     190: 
     20        move.l (%a1)+,-(%sp) 
     21        dbf.w %d0,0b 
    2322 
    2423.section _st1050 
    2524__restore_screen: 
    26 | Push LCD_SIZE (size parameter). 
    27         pea.l 3840 
    28 | Push pointer to saved data on stack (source parameter). 
    29         pea.l (%sp,16) 
    30 | Push LCD_MEM (dest parameter). 
    31         pea.l 0x4C00 
    32 | %a2 is still a pointer to memcpy since the function wasn't allowed to destroy it. 
    33         jsr (%a2) 
    34 | Clean up the stack (data and parameters). 
    35         lea.l (%sp,3864),%sp 
    36 | Restore %a2 for the AMS. 
    37         movea.l (%sp)+,%a2 
     25| Execute the loop LCD_SIZE/4 times. 
     26        move.w #(3840/4)-1,%d0 
     27| LCD_MEM + LCD_SIZE. 
     28        lea.l 0x5b00.w,%a1 
     29| Pop data from the stack. 
     300: 
     31        move.l (%sp)+,-(%a1) 
     32        dbf.w %d0,0b 
  • deleted file trunk/tigcc/archive/startup/_save_screen_1.s

    diff --git a/trunk/tigcc/archive/startup/_save_screen_1.s b/trunk/tigcc/archive/startup/_save_screen_1.s
    deleted file mode 100644
    index 6173e12..0000000
    + -  
    1         .xdef __save_screen_AND_NOT___optimize_rom_calls 
    2  
    3 | This object file needs the jump table in %a0. 
    4         .xdef __ref_all___get_jump_table 
    5  
    6 .section _st111 
    7 | %a0 still contains the address of the jump table. 
    8 | See _get_jump_table.s 
    9         move.l (%a0,0x26A*4),%a2 /* memcpy */ 
  • deleted file trunk/tigcc/archive/startup/_save_screen_2.s

    diff --git a/trunk/tigcc/archive/startup/_save_screen_2.s b/trunk/tigcc/archive/startup/_save_screen_2.s
    deleted file mode 100644
    index 31da6c9..0000000
    + -  
    1         .xdef __save_screen_AND___optimize_rom_calls 
    2  
    3 .section _st111 
    4 | Since __set_file_in_use_bit is imported, 
    5 | %a5 contains the address of the jump table. 
    6         move.l (%a5,0x26A*4),%a2 /* memcpy */ 
  • trunk/tigcc/archive/tigcc.tpr

    diff --git a/trunk/tigcc/archive/tigcc.tpr b/trunk/tigcc/archive/tigcc.tpr
    index 4788ae3..d9ddbf2 100644
    a b GNU Assembler File 171=startup\_smart_error_msg.s 
    347347GNU Assembler File 171 Folder=startup 
    348348GNU Assembler File 172=startup\_save_screen.s 
    349349GNU Assembler File 172 Folder=startup 
    350 GNU Assembler File 173=startup\_save_screen_1.s 
     350GNU Assembler File 173=startup\_fline_internal_emulator.s 
    351351GNU Assembler File 173 Folder=startup 
    352 GNU Assembler File 174=startup\_save_screen_2.s 
     352GNU Assembler File 174=startup\_fline_internal_emulator_1_r.s 
    353353GNU Assembler File 174 Folder=startup 
    354 GNU Assembler File 175=startup\_fline_internal_emulator.s 
     354GNU Assembler File 175=startup\_fline_internal_emulator_1_j4.s 
    355355GNU Assembler File 175 Folder=startup 
    356 GNU Assembler File 176=startup\_fline_internal_emulator_1_r.s 
     356GNU Assembler File 176=startup\_fline_internal_emulator_1_j6.s 
    357357GNU Assembler File 176 Folder=startup 
    358 GNU Assembler File 177=startup\_fline_internal_emulator_1_j4.s 
     358GNU Assembler File 177=startup\_fline_internal_emulator_2_j6.s 
    359359GNU Assembler File 177 Folder=startup 
    360 GNU Assembler File 178=startup\_fline_internal_emulator_1_j6.s 
     360GNU Assembler File 178=startup\_fline_internal_emulator_2_r.s 
    361361GNU Assembler File 178 Folder=startup 
    362 GNU Assembler File 179=startup\_fline_internal_emulator_2_j6.s 
     362GNU Assembler File 179=startup\_fline_internal_emulator_3_j6.s 
    363363GNU Assembler File 179 Folder=startup 
    364 GNU Assembler File 180=startup\_fline_internal_emulator_2_r.s 
     364GNU Assembler File 180=startup\_fline_internal_emulator_3_r_j6.s 
    365365GNU Assembler File 180 Folder=startup 
    366 GNU Assembler File 181=startup\_fline_internal_emulator_3_j6.s 
     366GNU Assembler File 181=startup\_fline_internal_emulator_3_j4.s 
    367367GNU Assembler File 181 Folder=startup 
    368 GNU Assembler File 182=startup\_fline_internal_emulator_3_r_j6.s 
     368GNU Assembler File 182=startup\_fline_internal_emulator_3_r_j4.s 
    369369GNU Assembler File 182 Folder=startup 
    370 GNU Assembler File 183=startup\_fline_internal_emulator_3_j4.s 
     370GNU Assembler File 183=startup\_fline_internal_emulator_3_r.s 
    371371GNU Assembler File 183 Folder=startup 
    372 GNU Assembler File 184=startup\_fline_internal_emulator_3_r_j4.s 
     372GNU Assembler File 184=startup\_fline_internal_emulator_4_j6.s 
    373373GNU Assembler File 184 Folder=startup 
    374 GNU Assembler File 185=startup\_fline_internal_emulator_3_r.s 
     374GNU Assembler File 185=startup\_fline_internal_emulator_4_j6_u.s 
    375375GNU Assembler File 185 Folder=startup 
    376 GNU Assembler File 186=startup\_fline_internal_emulator_4_j6.s 
     376GNU Assembler File 186=startup\_fline_internal_emulator_4_j6_s.s 
    377377GNU Assembler File 186 Folder=startup 
    378 GNU Assembler File 187=startup\_fline_internal_emulator_4_j6_u.s 
     378GNU Assembler File 187=startup\_fline_internal_emulator_4_j4.s 
    379379GNU Assembler File 187 Folder=startup 
    380 GNU Assembler File 188=startup\_fline_internal_emulator_4_j6_s.s 
     380GNU Assembler File 188=startup\_fline_internal_emulator_4_j4_u.s 
    381381GNU Assembler File 188 Folder=startup 
    382 GNU Assembler File 189=startup\_fline_internal_emulator_4_j4.s 
     382GNU Assembler File 189=startup\_fline_internal_emulator_4_j4_s.s 
    383383GNU Assembler File 189 Folder=startup 
    384 GNU Assembler File 190=startup\_fline_internal_emulator_4_j4_u.s 
     384GNU Assembler File 190=startup\_fline_internal_emulator_4_r.s 
    385385GNU Assembler File 190 Folder=startup 
    386 GNU Assembler File 191=startup\_fline_internal_emulator_4_j4_s.s 
     386GNU Assembler File 191=startup\_constructed_jsr.s 
    387387GNU Assembler File 191 Folder=startup 
    388 GNU Assembler File 192=startup\_fline_internal_emulator_4_r.s 
     388GNU Assembler File 192=startup\_constructed_jmp.s 
    389389GNU Assembler File 192 Folder=startup 
    390 GNU Assembler File 193=startup\_constructed_jsr.s 
     390GNU Assembler File 193=startup\_error_return_support.s 
    391391GNU Assembler File 193 Folder=startup 
    392 GNU Assembler File 194=startup\_constructed_jmp.s 
     392GNU Assembler File 194=startup\_error_return_support_ams_1.s 
    393393GNU Assembler File 194 Folder=startup 
    394 GNU Assembler File 195=startup\_error_return_support.s 
     394GNU Assembler File 195=startup\_error_return_support_ams_x.s 
    395395GNU Assembler File 195 Folder=startup 
    396 GNU Assembler File 196=startup\_error_return_support_ams_1.s 
     396GNU Assembler File 196=startup\_initialize_bss.s 
    397397GNU Assembler File 196 Folder=startup 
    398 GNU Assembler File 197=startup\_error_return_support_ams_x.s 
     398GNU Assembler File 197=startup\_initialize_bss_1.s 
    399399GNU Assembler File 197 Folder=startup 
    400 GNU Assembler File 198=startup\_initialize_bss.s 
     400GNU Assembler File 198=startup\_initialize_bss_2.s 
    401401GNU Assembler File 198 Folder=startup 
    402 GNU Assembler File 199=startup\_initialize_bss_1.s 
     402GNU Assembler File 199=startup\_handle_constructors.s 
    403403GNU Assembler File 199 Folder=startup 
    404 GNU Assembler File 200=startup\_initialize_bss_2.s 
     404GNU Assembler File 200=startup\_save_all_registers_main.s 
    405405GNU Assembler File 200 Folder=startup 
    406 GNU Assembler File 201=startup\_handle_constructors.s 
     406GNU Assembler File 201=startup\_save_the_sp.s 
    407407GNU Assembler File 201 Folder=startup 
    408 GNU Assembler File 202=startup\_save_all_registers_main.s 
     408GNU Assembler File 202=startup\_save_the_sp_complex.s 
    409409GNU Assembler File 202 Folder=startup 
    410 GNU Assembler File 203=startup\_save_the_sp.s 
     410GNU Assembler File 203=startup\_call_user_main.s 
    411411GNU Assembler File 203 Folder=startup 
    412 GNU Assembler File 204=startup\_save_the_sp_complex.s 
     412GNU Assembler File 204=startup\_simple_main_jump.s 
    413413GNU Assembler File 204 Folder=startup 
    414 GNU Assembler File 205=startup\_call_user_main.s 
     414GNU Assembler File 205=startup\_handle_destructors.s 
    415415GNU Assembler File 205 Folder=startup 
    416 GNU Assembler File 206=startup\_simple_main_jump.s 
     416GNU Assembler File 206=startup\_nostub_retval.s 
    417417GNU Assembler File 206 Folder=startup 
    418 GNU Assembler File 207=startup\_handle_destructors.s 
     418GNU Assembler File 207=startup\_nostub_retval_var.s 
    419419GNU Assembler File 207 Folder=startup 
    420 GNU Assembler File 208=startup\_nostub_retval.s 
     420GNU Assembler File 208=startup\_kernel_retval.s 
    421421GNU Assembler File 208 Folder=startup 
    422 GNU Assembler File 209=startup\_nostub_retval_var.s 
     422GNU Assembler File 209=startup\_kernel_retval_var.s 
    423423GNU Assembler File 209 Folder=startup 
    424 GNU Assembler File 210=startup\_kernel_retval.s 
     424GNU Assembler File 210=startup\_return_from_program.s 
    425425GNU Assembler File 210 Folder=startup 
    426 GNU Assembler File 211=startup\_kernel_retval_var.s 
     426GNU Assembler File 211=startup\_call_function_vector.s 
    427427GNU Assembler File 211 Folder=startup 
    428 GNU Assembler File 212=startup\_return_from_program.s 
     428GNU Assembler File 212=startup\_compressed_format_decoding.s 
    429429GNU Assembler File 212 Folder=startup 
    430 GNU Assembler File 213=startup\_call_function_vector.s 
     430GNU Assembler File 213=startup\_mlink_format_decoding.s 
    431431GNU Assembler File 213 Folder=startup 
    432 GNU Assembler File 214=startup\_compressed_format_decoding.s 
     432GNU Assembler File 214=startup\_calculator.s 
    433433GNU Assembler File 214 Folder=startup 
    434 GNU Assembler File 215=startup\_mlink_format_decoding.s 
     434GNU Assembler File 215=startup\_save_sp.s 
    435435GNU Assembler File 215 Folder=startup 
    436 GNU Assembler File 216=startup\_calculator.s 
     436GNU Assembler File 216=startup\_reference_symbols.s 
    437437GNU Assembler File 216 Folder=startup 
    438 GNU Assembler File 217=startup\_save_sp.s 
    439 GNU Assembler File 217 Folder=startup 
    440 GNU Assembler File 218=startup\_reference_symbols.s 
    441 GNU Assembler File 218 Folder=startup 
    442438Text File 1=License.txt 
    443439Text File 2=startup\Startup.txt 
    444440Text File 2 Folder=startup