Browse Source

tigcclib: optimize (-16 bytes) the SAVE_SCREEN implementation (Martial Demolins).
Most examples are testcases for this feature.

git-svn-id: file:///var/svn/tigccpp/trunk@1338 9552661e-59e3-4036-b4f2-dbe53926924f

debrouxl 15 years ago
parent
commit
4fb766a4f2

+ 1 - 1
tigcc/archive/startup/Startup.txt

@@ -43,7 +43,7 @@ in front of program sections.
  90        **  | ROM call relocation
  95-99     **  | Data variable support
  100       **  | BSS support
- 110-112   **  | Screen saving
+ 110       **  | Screen saving
  130           | Internal F-Line emulator
  140           | Error return support
  150-153       | BSS initialization

+ 21 - 27
tigcc/archive/startup/_save_screen.s

@@ -3,35 +3,29 @@
 | This file requires cleanup code.
 	.xdef __ref_all___complex_main
 
+| Screen save & restore used to be done by calling memcpy, even if doing so
+| yields an executable 16 bytes larger (though a very tiny fraction of a
+| second faster). SAVE_SCREEN is present in most AMS native programs, so its
+| implementation should be focused on a low footprint.
+
 .section _st110
 __save_screen:
-| Save %a2 since we may not destroy it when we return to the AMS.
-	pea.l (%a2)
-| Get LCD_SIZE bytes on the stack.
-	lea.l (%sp,-3840),%sp
-| Push LCD_SIZE (size parameter).
-	pea.l 3840
-| Push LCD_MEM (source parameter).
-	pea.l 0x4C00
-| Push pointer to the space on the stack (dest parameter).
-	pea.l (%sp,8)
-
-| Code to load memcpy into %a2 is inserted here.
-
-.section _st112
-	jsr (%a2)
+| Execute the loop LCD_SIZE/4 times (4 bytes are transferred at a time).
+	move.w #(3840/4)-1,%d0
+| LCD_MEM.
+	lea.l 0x4c00.w,%a0
+| Push data on the stack.
+0:
+	move.l (%a0)+,-(%sp)
+	dbf.w %d0,0b
 
 .section _st1050
 __restore_screen:
-| Push LCD_SIZE (size parameter).
-	pea.l 3840
-| Push pointer to saved data on stack (source parameter).
-	pea.l (%sp,16)
-| Push LCD_MEM (dest parameter).
-	pea.l 0x4C00
-| %a2 is still a pointer to memcpy since the function wasn't allowed to destroy it.
-	jsr (%a2)
-| Clean up the stack (data and parameters).
-	lea.l (%sp,3864),%sp
-| Restore %a2 for the AMS.
-	movea.l (%sp)+,%a2
+| Execute the loop LCD_SIZE/4 times.
+	move.w #(3840/4)-1,%d0
+| LCD_MEM + LCD_SIZE.
+	lea.l 0x5b00.w,%a0
+| Pop data from the stack.
+0:
+	move.l (%sp)+,-(%a0)
+	dbf.w %d0,0b

+ 0 - 9
tigcc/archive/startup/_save_screen_1.s

@@ -1,9 +0,0 @@
-	.xdef __save_screen_AND_NOT___optimize_rom_calls
-
-| This object file needs the jump table in %a0.
-	.xdef __ref_all___get_jump_table
-
-.section _st111
-| %a0 still contains the address of the jump table.
-| See _get_jump_table.s
-	move.l (%a0,0x26A*4),%a2 /* memcpy */

+ 0 - 6
tigcc/archive/startup/_save_screen_2.s

@@ -1,6 +0,0 @@
-	.xdef __save_screen_AND___optimize_rom_calls
-
-.section _st111
-| Since __set_file_in_use_bit is imported,
-| %a5 contains the address of the jump table.
-	move.l (%a5,0x26A*4),%a2 /* memcpy */

+ 44 - 48
tigcc/archive/tigcc.tpr

@@ -347,98 +347,94 @@ GNU Assembler File 171=startup\_smart_error_msg.s
 GNU Assembler File 171 Folder=startup
 GNU Assembler File 172=startup\_save_screen.s
 GNU Assembler File 172 Folder=startup
-GNU Assembler File 173=startup\_save_screen_1.s
+GNU Assembler File 173=startup\_fline_internal_emulator.s
 GNU Assembler File 173 Folder=startup
-GNU Assembler File 174=startup\_save_screen_2.s
+GNU Assembler File 174=startup\_fline_internal_emulator_1_r.s
 GNU Assembler File 174 Folder=startup
-GNU Assembler File 175=startup\_fline_internal_emulator.s
+GNU Assembler File 175=startup\_fline_internal_emulator_1_j4.s
 GNU Assembler File 175 Folder=startup
-GNU Assembler File 176=startup\_fline_internal_emulator_1_r.s
+GNU Assembler File 176=startup\_fline_internal_emulator_1_j6.s
 GNU Assembler File 176 Folder=startup
-GNU Assembler File 177=startup\_fline_internal_emulator_1_j4.s
+GNU Assembler File 177=startup\_fline_internal_emulator_2_j6.s
 GNU Assembler File 177 Folder=startup
-GNU Assembler File 178=startup\_fline_internal_emulator_1_j6.s
+GNU Assembler File 178=startup\_fline_internal_emulator_2_r.s
 GNU Assembler File 178 Folder=startup
-GNU Assembler File 179=startup\_fline_internal_emulator_2_j6.s
+GNU Assembler File 179=startup\_fline_internal_emulator_3_j6.s
 GNU Assembler File 179 Folder=startup
-GNU Assembler File 180=startup\_fline_internal_emulator_2_r.s
+GNU Assembler File 180=startup\_fline_internal_emulator_3_r_j6.s
 GNU Assembler File 180 Folder=startup
-GNU Assembler File 181=startup\_fline_internal_emulator_3_j6.s
+GNU Assembler File 181=startup\_fline_internal_emulator_3_j4.s
 GNU Assembler File 181 Folder=startup
-GNU Assembler File 182=startup\_fline_internal_emulator_3_r_j6.s
+GNU Assembler File 182=startup\_fline_internal_emulator_3_r_j4.s
 GNU Assembler File 182 Folder=startup
-GNU Assembler File 183=startup\_fline_internal_emulator_3_j4.s
+GNU Assembler File 183=startup\_fline_internal_emulator_3_r.s
 GNU Assembler File 183 Folder=startup
-GNU Assembler File 184=startup\_fline_internal_emulator_3_r_j4.s
+GNU Assembler File 184=startup\_fline_internal_emulator_4_j6.s
 GNU Assembler File 184 Folder=startup
-GNU Assembler File 185=startup\_fline_internal_emulator_3_r.s
+GNU Assembler File 185=startup\_fline_internal_emulator_4_j6_u.s
 GNU Assembler File 185 Folder=startup
-GNU Assembler File 186=startup\_fline_internal_emulator_4_j6.s
+GNU Assembler File 186=startup\_fline_internal_emulator_4_j6_s.s
 GNU Assembler File 186 Folder=startup
-GNU Assembler File 187=startup\_fline_internal_emulator_4_j6_u.s
+GNU Assembler File 187=startup\_fline_internal_emulator_4_j4.s
 GNU Assembler File 187 Folder=startup
-GNU Assembler File 188=startup\_fline_internal_emulator_4_j6_s.s
+GNU Assembler File 188=startup\_fline_internal_emulator_4_j4_u.s
 GNU Assembler File 188 Folder=startup
-GNU Assembler File 189=startup\_fline_internal_emulator_4_j4.s
+GNU Assembler File 189=startup\_fline_internal_emulator_4_j4_s.s
 GNU Assembler File 189 Folder=startup
-GNU Assembler File 190=startup\_fline_internal_emulator_4_j4_u.s
+GNU Assembler File 190=startup\_fline_internal_emulator_4_r.s
 GNU Assembler File 190 Folder=startup
-GNU Assembler File 191=startup\_fline_internal_emulator_4_j4_s.s
+GNU Assembler File 191=startup\_constructed_jsr.s
 GNU Assembler File 191 Folder=startup
-GNU Assembler File 192=startup\_fline_internal_emulator_4_r.s
+GNU Assembler File 192=startup\_constructed_jmp.s
 GNU Assembler File 192 Folder=startup
-GNU Assembler File 193=startup\_constructed_jsr.s
+GNU Assembler File 193=startup\_error_return_support.s
 GNU Assembler File 193 Folder=startup
-GNU Assembler File 194=startup\_constructed_jmp.s
+GNU Assembler File 194=startup\_error_return_support_ams_1.s
 GNU Assembler File 194 Folder=startup
-GNU Assembler File 195=startup\_error_return_support.s
+GNU Assembler File 195=startup\_error_return_support_ams_x.s
 GNU Assembler File 195 Folder=startup
-GNU Assembler File 196=startup\_error_return_support_ams_1.s
+GNU Assembler File 196=startup\_initialize_bss.s
 GNU Assembler File 196 Folder=startup
-GNU Assembler File 197=startup\_error_return_support_ams_x.s
+GNU Assembler File 197=startup\_initialize_bss_1.s
 GNU Assembler File 197 Folder=startup
-GNU Assembler File 198=startup\_initialize_bss.s
+GNU Assembler File 198=startup\_initialize_bss_2.s
 GNU Assembler File 198 Folder=startup
-GNU Assembler File 199=startup\_initialize_bss_1.s
+GNU Assembler File 199=startup\_handle_constructors.s
 GNU Assembler File 199 Folder=startup
-GNU Assembler File 200=startup\_initialize_bss_2.s
+GNU Assembler File 200=startup\_save_all_registers_main.s
 GNU Assembler File 200 Folder=startup
-GNU Assembler File 201=startup\_handle_constructors.s
+GNU Assembler File 201=startup\_save_the_sp.s
 GNU Assembler File 201 Folder=startup
-GNU Assembler File 202=startup\_save_all_registers_main.s
+GNU Assembler File 202=startup\_save_the_sp_complex.s
 GNU Assembler File 202 Folder=startup
-GNU Assembler File 203=startup\_save_the_sp.s
+GNU Assembler File 203=startup\_call_user_main.s
 GNU Assembler File 203 Folder=startup
-GNU Assembler File 204=startup\_save_the_sp_complex.s
+GNU Assembler File 204=startup\_simple_main_jump.s
 GNU Assembler File 204 Folder=startup
-GNU Assembler File 205=startup\_call_user_main.s
+GNU Assembler File 205=startup\_handle_destructors.s
 GNU Assembler File 205 Folder=startup
-GNU Assembler File 206=startup\_simple_main_jump.s
+GNU Assembler File 206=startup\_nostub_retval.s
 GNU Assembler File 206 Folder=startup
-GNU Assembler File 207=startup\_handle_destructors.s
+GNU Assembler File 207=startup\_nostub_retval_var.s
 GNU Assembler File 207 Folder=startup
-GNU Assembler File 208=startup\_nostub_retval.s
+GNU Assembler File 208=startup\_kernel_retval.s
 GNU Assembler File 208 Folder=startup
-GNU Assembler File 209=startup\_nostub_retval_var.s
+GNU Assembler File 209=startup\_kernel_retval_var.s
 GNU Assembler File 209 Folder=startup
-GNU Assembler File 210=startup\_kernel_retval.s
+GNU Assembler File 210=startup\_return_from_program.s
 GNU Assembler File 210 Folder=startup
-GNU Assembler File 211=startup\_kernel_retval_var.s
+GNU Assembler File 211=startup\_call_function_vector.s
 GNU Assembler File 211 Folder=startup
-GNU Assembler File 212=startup\_return_from_program.s
+GNU Assembler File 212=startup\_compressed_format_decoding.s
 GNU Assembler File 212 Folder=startup
-GNU Assembler File 213=startup\_call_function_vector.s
+GNU Assembler File 213=startup\_mlink_format_decoding.s
 GNU Assembler File 213 Folder=startup
-GNU Assembler File 214=startup\_compressed_format_decoding.s
+GNU Assembler File 214=startup\_calculator.s
 GNU Assembler File 214 Folder=startup
-GNU Assembler File 215=startup\_mlink_format_decoding.s
+GNU Assembler File 215=startup\_save_sp.s
 GNU Assembler File 215 Folder=startup
-GNU Assembler File 216=startup\_calculator.s
+GNU Assembler File 216=startup\_reference_symbols.s
 GNU Assembler File 216 Folder=startup
-GNU Assembler File 217=startup\_save_sp.s
-GNU Assembler File 217 Folder=startup
-GNU Assembler File 218=startup\_reference_symbols.s
-GNU Assembler File 218 Folder=startup
 Text File 1=License.txt
 Text File 2=startup\Startup.txt
 Text File 2 Folder=startup