![]() |
![]() |
#1 |
Going nowhere
Join Date: Oct 2001
Location: United Kingdom
Age: 50
Posts: 9,017
|
Optimising a routine for 68000
OK, heres the code example i'm using below.
vertical_offset = $b0 REPT 39 add.w (a5)+,a1 ;Extract sine move.l colour(pc),a2 ; Pointer to colour table move.w (a2)+,(a1) move.w (a2)+,(vertical_offset*1)(a1) move.w (a2)+,(vertical_offset*2)(a1) move.w (a2)+,(vertical_offset*3)(a1) move.w (a2)+,(vertical_offset*4)(a1) move.w (a2)+,(vertical_offset*5)(a1) move.w (a2)+,(vertical_offset*6)(a1) move.w (a2)+,(vertical_offset*7)(a1) move.w (a2)+,(vertical_offset*8)(a1) move.w (a2)+,(vertical_offset*9)(a1) move.w (a2)+,(vertical_offset*10)(a1) move.w (a2)+,(vertical_offset*11)(a1) move.w (a2)+,(vertical_offset*12)(a1) move.w (a2)+,(vertical_offset*13(a1) addq.w #4,a6 move.l a6,a1 ENDR Is there a quicker way of writing the above? Its gets repeated lots in the code i'm using, on 68020 it just laughs at the overhead, on 68000 it slows down quite a bit. Any improvements anyone can see? |
![]() |
![]() |
#2 | |
Registered User
Join Date: Jan 2008
Location: Warsaw/Poland
Age: 56
Posts: 2,046
|
Quote:
Code:
vertical_offset = $b0 move.l colour(pc),a2 ; Pointer to colour table movem.l (a2)+,D0-D6 add.w (a5)+,a1 ;Extract sine move.w D0,(vertical_offset*1)(a1) swap d0 move.w d0,(a1) move.w d1,(vertical_offset*3)(a1) swap d1 move.w d1,(vertical_offset*2)(a1) move.w d2,(vertical_offset*5)(a1) swap d2 move.w d2,(vertical_offset*4)(a1) move.w d3,(vertical_offset*7)(a1) swap d3 move.w d3,(vertical_offset*6)(a1) move.w d4,(vertical_offset*9)(a1) swap d4 move.w d4,(vertical_offset*8)(a1) move.w d5,(vertical_offset*11)(a1) swap d5 move.w d5,(vertical_offset*10)(a1) move.w d6,(vertical_offset*13)(a1) swap d6 move.w d6,(vertical_offset*12(a1) addq.w #4,a6 move.l a6,a1 add.w (a5)+,a1 ;Extract sine move.w D0,(a1) swap d0 move.w d0,(vertical_offset*1)(a1) move.w d1,(vertical_offset*2)(a1) swap d1 move.w d1,(vertical_offset*3)(a1) move.w d2,(vertical_offset*4)(a1) swap d2 move.w d2,(vertical_offset*5)(a1) move.w d3,(vertical_offset*6)(a1) swap d3 move.w d3,(vertical_offset*7)(a1) move.w d4,(vertical_offset*8)(a1) swap d4 move.w d4,(vertical_offset*9)(a1) move.w d5,(vertical_offset*10)(a1) swap d5 move.w d5,(vertical_offset*11)(a1) move.w d6,(vertical_offset*12)(a1) swap d6 move.w d6,(vertical_offset*13(a1) addq.w #4,a6 move.l a6,a1 etc Last edited by Don_Adan; 19 December 2016 at 06:20. |
|
![]() |
![]() |
#3 |
son of 68k
Join Date: Nov 2007
Location: Lyon / France
Age: 51
Posts: 5,355
|
You can try preloading data with as many registers as possible :
Code:
move.l colour(pc),a2 ; Pointer to colour table movem.l (a2)+,d0-d1 movem.w (a2),d2-d7/a0/a2-a4 REPT 39 add.w (a5)+,a1 ; Extract sine swap d0 swap d1 move.w d0,(a1) move.w d1,(vertical_offset*2)(a1) swap d0 swap d1 move.w d0,(vertical_offset*1)(a1) move.w d1,(vertical_offset*3)(a1) move.w d2,(vertical_offset*5)(a1) move.w d3,(vertical_offset*4)(a1) move.w d4,(vertical_offset*6)(a1) move.w d5,(vertical_offset*7)(a1) move.w d6,(vertical_offset*8)(a1) move.w d7,(vertical_offset*9)(a1) move.w a0,(vertical_offset*10)(a1) move.w a2,(vertical_offset*11)(a1) move.w a3,(vertical_offset*12)(a1) move.w a4,(vertical_offset*13(a1) addq.w #4,a6 move.l a6,a1 ENDR |
![]() |
![]() |
#4 |
Lemon. / Core Design
Join Date: Mar 2016
Location: Tier 5
Posts: 1,213
|
move.w (a2)+,(a1)
move.w (a2)+,(vertical_offset*1)(a1) move.w (a2)+,(vertical_offset*2)(a1) move.w (a2)+,(vertical_offset*3)(a1) move.w (a2)+,(vertical_offset*4)(a1) move.w (a2)+,(vertical_offset*5)(a1) move.w (a2)+,(vertical_offset*6)(a1) move.w (a2)+,(vertical_offset*7)(a1) move.w (a2)+,(vertical_offset*8)(a1) move.w (a2)+,(vertical_offset*9)(a1) move.w (a2)+,(vertical_offset*10)(a1) move.w (a2)+,(vertical_offset*11)(a1) move.w (a2)+,(vertical_offset*12)(a1) move.w (a2)+,(vertical_offset*13)(a1) use the blitter for this ![]() |
![]() |
Currently Active Users Viewing This Thread: 1 (0 members and 1 guests) | |
Thread Tools | |
![]() |
||||
Thread | Thread Starter | Forum | Replies | Last Post |
ASM optimising NetSurf | arti | Coders. Asm / Hardware | 40 | 19 June 2016 18:53 |
Optimising CD32 Boot Times | Amigajay | project.CD32 Conversion | 11 | 05 March 2016 13:30 |
Optimising ILBM decode | pmc | Coders. Asm / Hardware | 21 | 12 October 2011 20:24 |
Optimised tile copying routine in 68000 assembly | Codetapper | Coders. General | 16 | 09 October 2011 19:34 |
help optimising a section of code | h0ffman | Coders. General | 15 | 02 March 2011 13:19 |
|
|