flat assembler
Message board for the users of flat assembler.
![]() |
Author |
|
cvfirefox 17 Oct 2008, 03:04
Code: # Copyright 1998-2004 - Just For Fun Software, Inc., all rights reserved # Author: George Woltman # Email: woltman@alum.mit.edu # # ******************************************************** # ******************************************************** # ******************** FFT MACROS ********************** # ******************************************************** # ******************************************************** ## Perform a 32-element FFT. .macro fft32 LOCAL b1b, c1b ## Do a forward FFT only .if type EQ 1 call x32_fft jmp xmiddle_1 .endif ## Do a squaring .if type EQ 2 call x32_fft call xmiddle_2 ## jmp x32_finish_unfft .endif ## Do a multiply .if type EQ 3 call x32_fft call xmiddle_3 jmp x32_finish_unfft .endif ## Do a multiply with pre-FFTed inputs .if type EQ 4 call xmiddle_4 jmp x32_finish_unfft .endif ## Do FFT levels 1,2,3 ## Values 0-31 is real data. ## ## On input the 32-byte cache lines hold these data values: ## 0 16 1 17 ## 2 ... ## ... ... ## 14 ... ## On output the 32-byte cache lines hold these data values: ## 0 4 1 5 ## 2 ... ## 8 ... ## ... ## Do 4 eight_reals_first_fft macros ## distance between fft data elements is 4 .if type EQ 1 x32_fft: copy_7_words subl %eax,%eax b1b: disp eight_reals_first_fft, 4*dist1, 8*dist1, 8 leal dist1(%esi),%esi ## Next source pointer addb $256/4, %al ## Test loop counter jnc b1b ## Iterate if necessary leal esi-4*dist1,%esi ## Restore source pointer ## End common FFT code ret .endif ## Do inverse FFT levels 1,2,3 ## On input the 32-byte cache lines hold these data values: ## 0 4 1 5 ## 2 ... ## 8 ... ## ... ## On output the 32-byte cache lines hold these data values: ## 0 16 1 17 ## 2 ... ## ... ... ## 14 ... ## Do 4 eight_reals_last_unfft macros ## distance between fft data elements is 4 .if type EQ 2 x32_finish_unfft: c1b: disp eight_reals_last_unfft, 8, 4*dist1, 8*dist1 leal dist1(%esi),%esi ## Next source pointer addb $256/4, %al ## Test loop counter jnc c1b ## Iterate if necessary leal esi-4*dist1,%esi ## Restore source pointer fft_3_ret .endif .endm .end How can I call this macro itself in itself? _________________ -If you ain't first, then you're last. |
|||
![]() |
|
cvfirefox 17 Oct 2008, 04:28
Thanks revolution
I've just solved my prob. I'm actually doing conversion from intel syn to AT&T syn. I crop this small macro part out and converted them to AT&T syn to output them to .o file and compare to the intel obj file. This is the part that I've converted. |
|||
![]() |
|
cvfirefox 17 Oct 2008, 04:32
By the way, the "LOCAL b1b, c1b " couldn't be understood by GAS. What is the GAS way of doing the "LOCAL b1b, c1b " ?
|
|||
![]() |
|
revolution 17 Oct 2008, 04:37
I feel sorry for you that you have to convert the nice Intel syntax into the ugly AT&T syntax. I hope you don't go crazy in the process. Good luck.
As for how GAS handles locals, well I have no idea, perhaps the GAS manual can help? |
|||
![]() |
|
cvfirefox 17 Oct 2008, 07:20
Yes Revolution, I think I'll hv to go for that
Thanks there bro |
|||
![]() |
|
< Last Thread | Next Thread > |
Forum Rules:
|
Copyright © 1999-2025, Tomasz Grysztar. Also on GitHub, YouTube.
Website powered by rwasa.