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. |
| 43 | 43 | 90 ** | ROM call relocation |
| 44 | 44 | 95-99 ** | Data variable support |
| 45 | 45 | 100 ** | BSS support |
| 46 | | 110-112 ** | Screen saving |
| | 46 | 110 ** | Screen saving |
| 47 | 47 | 130 | Internal F-Line emulator |
| 48 | 48 | 140 | Error return support |
| 49 | 49 | 150-153 | BSS initialization |
diff --git a/trunk/tigcc/archive/startup/_save_screen.s b/trunk/tigcc/archive/startup/_save_screen.s
index 66dfe64..bf8cd9a 100644
|
a
|
b
|
|
| 3 | 3 | | This file requires cleanup code. |
| 4 | 4 | .xdef __ref_all___complex_main |
| 5 | 5 | |
| | 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 | |
| 6 | 12 | .section _st110 |
| 7 | 13 | __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. |
| | 19 | 0: |
| | 20 | move.l (%a1)+,-(%sp) |
| | 21 | dbf.w %d0,0b |
| 23 | 22 | |
| 24 | 23 | .section _st1050 |
| 25 | 24 | __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. |
| | 30 | 0: |
| | 31 | move.l (%sp)+,-(%a1) |
| | 32 | dbf.w %d0,0b |
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 */ |
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 */ |
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 |
| 347 | 347 | GNU Assembler File 171 Folder=startup |
| 348 | 348 | GNU Assembler File 172=startup\_save_screen.s |
| 349 | 349 | GNU Assembler File 172 Folder=startup |
| 350 | | GNU Assembler File 173=startup\_save_screen_1.s |
| | 350 | GNU Assembler File 173=startup\_fline_internal_emulator.s |
| 351 | 351 | GNU Assembler File 173 Folder=startup |
| 352 | | GNU Assembler File 174=startup\_save_screen_2.s |
| | 352 | GNU Assembler File 174=startup\_fline_internal_emulator_1_r.s |
| 353 | 353 | GNU Assembler File 174 Folder=startup |
| 354 | | GNU Assembler File 175=startup\_fline_internal_emulator.s |
| | 354 | GNU Assembler File 175=startup\_fline_internal_emulator_1_j4.s |
| 355 | 355 | GNU Assembler File 175 Folder=startup |
| 356 | | GNU Assembler File 176=startup\_fline_internal_emulator_1_r.s |
| | 356 | GNU Assembler File 176=startup\_fline_internal_emulator_1_j6.s |
| 357 | 357 | GNU Assembler File 176 Folder=startup |
| 358 | | GNU Assembler File 177=startup\_fline_internal_emulator_1_j4.s |
| | 358 | GNU Assembler File 177=startup\_fline_internal_emulator_2_j6.s |
| 359 | 359 | GNU Assembler File 177 Folder=startup |
| 360 | | GNU Assembler File 178=startup\_fline_internal_emulator_1_j6.s |
| | 360 | GNU Assembler File 178=startup\_fline_internal_emulator_2_r.s |
| 361 | 361 | GNU Assembler File 178 Folder=startup |
| 362 | | GNU Assembler File 179=startup\_fline_internal_emulator_2_j6.s |
| | 362 | GNU Assembler File 179=startup\_fline_internal_emulator_3_j6.s |
| 363 | 363 | GNU Assembler File 179 Folder=startup |
| 364 | | GNU Assembler File 180=startup\_fline_internal_emulator_2_r.s |
| | 364 | GNU Assembler File 180=startup\_fline_internal_emulator_3_r_j6.s |
| 365 | 365 | GNU Assembler File 180 Folder=startup |
| 366 | | GNU Assembler File 181=startup\_fline_internal_emulator_3_j6.s |
| | 366 | GNU Assembler File 181=startup\_fline_internal_emulator_3_j4.s |
| 367 | 367 | GNU Assembler File 181 Folder=startup |
| 368 | | GNU Assembler File 182=startup\_fline_internal_emulator_3_r_j6.s |
| | 368 | GNU Assembler File 182=startup\_fline_internal_emulator_3_r_j4.s |
| 369 | 369 | GNU Assembler File 182 Folder=startup |
| 370 | | GNU Assembler File 183=startup\_fline_internal_emulator_3_j4.s |
| | 370 | GNU Assembler File 183=startup\_fline_internal_emulator_3_r.s |
| 371 | 371 | GNU Assembler File 183 Folder=startup |
| 372 | | GNU Assembler File 184=startup\_fline_internal_emulator_3_r_j4.s |
| | 372 | GNU Assembler File 184=startup\_fline_internal_emulator_4_j6.s |
| 373 | 373 | GNU Assembler File 184 Folder=startup |
| 374 | | GNU Assembler File 185=startup\_fline_internal_emulator_3_r.s |
| | 374 | GNU Assembler File 185=startup\_fline_internal_emulator_4_j6_u.s |
| 375 | 375 | GNU Assembler File 185 Folder=startup |
| 376 | | GNU Assembler File 186=startup\_fline_internal_emulator_4_j6.s |
| | 376 | GNU Assembler File 186=startup\_fline_internal_emulator_4_j6_s.s |
| 377 | 377 | GNU Assembler File 186 Folder=startup |
| 378 | | GNU Assembler File 187=startup\_fline_internal_emulator_4_j6_u.s |
| | 378 | GNU Assembler File 187=startup\_fline_internal_emulator_4_j4.s |
| 379 | 379 | GNU Assembler File 187 Folder=startup |
| 380 | | GNU Assembler File 188=startup\_fline_internal_emulator_4_j6_s.s |
| | 380 | GNU Assembler File 188=startup\_fline_internal_emulator_4_j4_u.s |
| 381 | 381 | GNU Assembler File 188 Folder=startup |
| 382 | | GNU Assembler File 189=startup\_fline_internal_emulator_4_j4.s |
| | 382 | GNU Assembler File 189=startup\_fline_internal_emulator_4_j4_s.s |
| 383 | 383 | GNU Assembler File 189 Folder=startup |
| 384 | | GNU Assembler File 190=startup\_fline_internal_emulator_4_j4_u.s |
| | 384 | GNU Assembler File 190=startup\_fline_internal_emulator_4_r.s |
| 385 | 385 | GNU Assembler File 190 Folder=startup |
| 386 | | GNU Assembler File 191=startup\_fline_internal_emulator_4_j4_s.s |
| | 386 | GNU Assembler File 191=startup\_constructed_jsr.s |
| 387 | 387 | GNU Assembler File 191 Folder=startup |
| 388 | | GNU Assembler File 192=startup\_fline_internal_emulator_4_r.s |
| | 388 | GNU Assembler File 192=startup\_constructed_jmp.s |
| 389 | 389 | GNU Assembler File 192 Folder=startup |
| 390 | | GNU Assembler File 193=startup\_constructed_jsr.s |
| | 390 | GNU Assembler File 193=startup\_error_return_support.s |
| 391 | 391 | GNU Assembler File 193 Folder=startup |
| 392 | | GNU Assembler File 194=startup\_constructed_jmp.s |
| | 392 | GNU Assembler File 194=startup\_error_return_support_ams_1.s |
| 393 | 393 | GNU Assembler File 194 Folder=startup |
| 394 | | GNU Assembler File 195=startup\_error_return_support.s |
| | 394 | GNU Assembler File 195=startup\_error_return_support_ams_x.s |
| 395 | 395 | GNU Assembler File 195 Folder=startup |
| 396 | | GNU Assembler File 196=startup\_error_return_support_ams_1.s |
| | 396 | GNU Assembler File 196=startup\_initialize_bss.s |
| 397 | 397 | GNU Assembler File 196 Folder=startup |
| 398 | | GNU Assembler File 197=startup\_error_return_support_ams_x.s |
| | 398 | GNU Assembler File 197=startup\_initialize_bss_1.s |
| 399 | 399 | GNU Assembler File 197 Folder=startup |
| 400 | | GNU Assembler File 198=startup\_initialize_bss.s |
| | 400 | GNU Assembler File 198=startup\_initialize_bss_2.s |
| 401 | 401 | GNU Assembler File 198 Folder=startup |
| 402 | | GNU Assembler File 199=startup\_initialize_bss_1.s |
| | 402 | GNU Assembler File 199=startup\_handle_constructors.s |
| 403 | 403 | GNU Assembler File 199 Folder=startup |
| 404 | | GNU Assembler File 200=startup\_initialize_bss_2.s |
| | 404 | GNU Assembler File 200=startup\_save_all_registers_main.s |
| 405 | 405 | GNU Assembler File 200 Folder=startup |
| 406 | | GNU Assembler File 201=startup\_handle_constructors.s |
| | 406 | GNU Assembler File 201=startup\_save_the_sp.s |
| 407 | 407 | GNU Assembler File 201 Folder=startup |
| 408 | | GNU Assembler File 202=startup\_save_all_registers_main.s |
| | 408 | GNU Assembler File 202=startup\_save_the_sp_complex.s |
| 409 | 409 | GNU Assembler File 202 Folder=startup |
| 410 | | GNU Assembler File 203=startup\_save_the_sp.s |
| | 410 | GNU Assembler File 203=startup\_call_user_main.s |
| 411 | 411 | GNU Assembler File 203 Folder=startup |
| 412 | | GNU Assembler File 204=startup\_save_the_sp_complex.s |
| | 412 | GNU Assembler File 204=startup\_simple_main_jump.s |
| 413 | 413 | GNU Assembler File 204 Folder=startup |
| 414 | | GNU Assembler File 205=startup\_call_user_main.s |
| | 414 | GNU Assembler File 205=startup\_handle_destructors.s |
| 415 | 415 | GNU Assembler File 205 Folder=startup |
| 416 | | GNU Assembler File 206=startup\_simple_main_jump.s |
| | 416 | GNU Assembler File 206=startup\_nostub_retval.s |
| 417 | 417 | GNU Assembler File 206 Folder=startup |
| 418 | | GNU Assembler File 207=startup\_handle_destructors.s |
| | 418 | GNU Assembler File 207=startup\_nostub_retval_var.s |
| 419 | 419 | GNU Assembler File 207 Folder=startup |
| 420 | | GNU Assembler File 208=startup\_nostub_retval.s |
| | 420 | GNU Assembler File 208=startup\_kernel_retval.s |
| 421 | 421 | GNU Assembler File 208 Folder=startup |
| 422 | | GNU Assembler File 209=startup\_nostub_retval_var.s |
| | 422 | GNU Assembler File 209=startup\_kernel_retval_var.s |
| 423 | 423 | GNU Assembler File 209 Folder=startup |
| 424 | | GNU Assembler File 210=startup\_kernel_retval.s |
| | 424 | GNU Assembler File 210=startup\_return_from_program.s |
| 425 | 425 | GNU Assembler File 210 Folder=startup |
| 426 | | GNU Assembler File 211=startup\_kernel_retval_var.s |
| | 426 | GNU Assembler File 211=startup\_call_function_vector.s |
| 427 | 427 | GNU Assembler File 211 Folder=startup |
| 428 | | GNU Assembler File 212=startup\_return_from_program.s |
| | 428 | GNU Assembler File 212=startup\_compressed_format_decoding.s |
| 429 | 429 | GNU Assembler File 212 Folder=startup |
| 430 | | GNU Assembler File 213=startup\_call_function_vector.s |
| | 430 | GNU Assembler File 213=startup\_mlink_format_decoding.s |
| 431 | 431 | GNU Assembler File 213 Folder=startup |
| 432 | | GNU Assembler File 214=startup\_compressed_format_decoding.s |
| | 432 | GNU Assembler File 214=startup\_calculator.s |
| 433 | 433 | GNU Assembler File 214 Folder=startup |
| 434 | | GNU Assembler File 215=startup\_mlink_format_decoding.s |
| | 434 | GNU Assembler File 215=startup\_save_sp.s |
| 435 | 435 | GNU Assembler File 215 Folder=startup |
| 436 | | GNU Assembler File 216=startup\_calculator.s |
| | 436 | GNU Assembler File 216=startup\_reference_symbols.s |
| 437 | 437 | GNU 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 |
| 442 | 438 | Text File 1=License.txt |
| 443 | 439 | Text File 2=startup\Startup.txt |
| 444 | 440 | Text File 2 Folder=startup |