ebmDevMag.com home
ebm Developer's Magazine
links

developer's mag
main page

article
part 1
part 2
part 3
part 4
part 5
part 6
part 7
part 8
part 9


6 - Some Assembly Required

The ASM compare function operates the same as the C, but of course faster - qsort() is sped up by about 25%:
ASM_Code_Compare

    ; prototype:
    ;
    ; int ASM_Code_Compare(const void *ptrA,const void *ptrB);
    ;
    ; equivalent to:
    ;
    ; return *((unsigned long*)ptrA) - *((unsigned long*)ptrB);
    ;
    ; compare two longs pointed to by pointers in r0, r1 
    ; we use r2 and r3 for workspace, and need no other 
    ; registers, so no pushing
    ;
    mov   r1,t   ; get long value pointed to by r1
    mov32 (t),r2 ; and save in r2
    mov   r0,t   ; get long value pointed to by r0
    mov32 (t),r3 ; save into r3-but we really only need t's value
    rptr  r2
    sub   rp     ; subtract the two
    mov   t,r0   ; place result in r0 for return
    rts
The format may appear odd, since this is assembly code in its natural state, not as part of a C function. To code in this way, the source was created as the file 'func.s', and the makefile modified to compile it:

  SRCS_CPP = eg_12.cpp eg_12_form.cpp
  SRCS_C =
  SRCS_S = func.s


Previous Section
Next Section

Copyright © 2001-2006 ebmDevMag.com - Legal Notice