Archelon Ischyros Archelon Inc.

Programming tools for your new processor

Compiler Produced FFT optimized code

; Archelon URCC C 3.17 2003/09/19 MCSYS = ucode
; - fft.c at Wed Sep 24 15:22:18 2003
; struct    complex { float rp, ip; } ;
; struct complex    z[ 256 +1], w[ 256 +1],
;     e[ 129 +1];
; float    zr, zi;
; extern int seed;
; float Cos (x) float x;
	.segment fft_code,memtype=0,locinc=1,rom
	.global _Cos
_Cos:
	addi_l	R31,0x4,R31
	strri_l	R30,R31,-0x4
	mov_l	R31,R30
	addi_l	R31,0x8,R31
	strri_l	R0,R30,0x0
	strri_l	R1,R30,0x4
; ENTRY
	cvtdf	R24,R1
; x at argloc 0 (0x0) in reg  size 4
; i in reg  size 2
; factor in reg  size 2
; result in reg  size 4
; power in reg  size 4
; .otmp0 in reg  size 4
; .otmp1 in reg  size 2
; .otmp2 in reg  size 2
; .otmp3 in reg  size 2
; .otmp4 in reg  size 2
; .otmp5 in reg  size 4
; .otmp6 in reg  size 4
; .otmp7 in reg  size 4
; .otmp8 in reg  size 4
; .otmp9 in reg  size 4
; .otmp10 in reg  size 4
; {
; int i, factor;
; float    result,power;
;    result = 1.0; factor = 1;  power = x;
;    for ( i = 2; i <= 10; i++ ) {
;       factor = factor * i;  power = power*x;
;       if ( (i & 1) == 0 )  {
; .otmp11 in reg  size 2
;         if ( (i & 3) == 0 ) result = result + power/factor;
;       }
;    }
;    return (result);
;         else result = result - power/factor;
	ldzi_f	__fconsf1,R24
	movi_w	0x1,R26
	movi_w	0x2,R25
	mov_f	R1,R27
Cos_L1:
	mul_w	R26,R25,R26
	mul_f	R27,R1,R27
	andi_w	R25,0x1,R0
	cmpi_w	R0,0x0
	bne	Cos_L4
	andi_w	R25,0x3,R0
	cmpi_w	R0,0x0
	bne	Cos_L3
	cvtwf	R26,R0
	div_f	R27,R0,R0
	add_f	R0,R24,R24
Cos_L4:
	addi_w	R25,0x1,R25
	cmpi_w	R25,0xa
	ble	Cos_L1
	br	Cos_L5
Cos_L3:
	cvtwf	R26,R0
	div_f	R27,R0,R0
	sub_f	R24,R0,R24
	br	Cos_L4
Cos_L5:
; EXIT
; .temp0 at stkloc 0 (0x0) size 8
	ldri_l	R30,0x0,R0
	ldri_l	R30,0x4,R1
	mov_l	R30,R31
	ldri_l	R31,-0x4,R30
	subi_l	R31,0x4,R31
	ret	
; }
; int Min0( arg1, arg2) int arg1, arg2;
	.global _Min0
_Min0:
	addi_l	R31,0x4,R31
	strri_l	R30,R31,-0x4
	mov_l	R31,R30
; ENTRY
; arg1 at argloc 0 (0x0) in reg  size 2
; arg2 at argloc 0 (0x0) in reg  size 2
; .otmp12 in reg  size 2
; .otmp13 in reg  size 2
;     {
;     if ( arg1 < arg2 )
;         return (arg1);
;     else
;         return (arg2);
	cmp_w	R24,R25
	bge	Min0_L1
	br	Min0_L2
Min0_L1:
	mov_l	R25,R24
Min0_L2:
; EXIT
	mov_l	R30,R31
	ldri_l	R31,-0x4,R30
	subi_l	R31,0x4,R31
	ret	
;     }
; void
; Printcomplex(  arg1, arg2, zarray, start, finish, increment)
;         int arg1, arg2, start, finish, increment;
;         struct complex zarray[];
	.global _Printcomplex
_Printcomplex:
	addi_l	R31,0x4,R31
	strri_l	R30,R31,-0x4
	mov_l	R31,R30
	addi_l	R31,0x24,R31
	strri_l	R0,R30,0x0
	strri_l	R1,R30,0x4
	strri_l	R2,R30,0x8
	strri_l	R3,R30,0xc
	strri_l	R4,R30,0x10
	strri_l	R5,R30,0x14
	strri_l	R6,R30,0x18
	strri_l	R7,R30,0x1c
	strri_l	R28,R30,0x20
; ENTRY
	mov_l	R26,R5
; zarray at argloc 0 (0x0) in reg  size 4
	mov_w	R27,R2
; start at argloc 0 (0x0) in reg  size 2
; finish at argloc -6 (0xfffffffa) size 2
	ldri_w	R30,-0x8,R4
; increment at argloc -8 (0xfffffff8) in reg  size 2
; i in reg  size 2
; .otmp14 in reg  size 4
; .otmp15 in reg  size 4
; .otmp16 in reg  size 4
; .otmp17 in reg  size 4
; .otmp18 in reg  size 2
; .otmp19 in reg  size 2
; .otmp20 in reg  size 2
; .otmp21 in reg  size 4
; .otmp22 in reg  size 4
; .otmp23 in reg  size 4
; .otmp24 in reg  size 4
; .otmp25 in reg  size 4
;     {
;     int i;
;     printf("\n") ;
;     i = start;
; .otmp26 in reg  size 2
;     do {
; .otmp27 in reg  size 4
; .otmp28 in reg  size 4
;         printf("  %15.3e%15.3e",zarray[i].rp,zarray[i].ip) ;
;         i = i + increment;
; .otmp29 in reg  size 2
;         printf("  %15.3e%15.3e",zarray[i].rp,zarray[i].ip) ;
; .otmp30 in reg  size 4
; .otmp31 in reg  size 4
;         printf("\n");
;         i = i + increment ;
; .otmp32 in reg  size 2
; .otmp33 in reg  size 2
; .otmp34 in reg  size 4
; .otmp35 in reg  size 4
; .otmp36 in reg  size 4
;     } while ( i <= finish );
	ldzi_l	__pcons1,R24
	call	_printf
	cvtswl	R2,R1
	cvtswl	R4,R6
	llsi_l	R1,0x3,R24
	llsi_l	R6,0x3,R7
	add_l	R24,R5,R0
	addi_l	R0,0x4,R3
Printcomplex_L2:
	addi_l	R31,0x8,R31
	ldzi_l	__pcons2,R24
	ldri_f	R0,0x0,R25
	cvtfd	R25,R25
	ldri_f	R3,0x0,R27
	cvtfd	R27,R27
	strri_d	R27,R31,-0x8
	call	_printf
	subi_l	R31,0x8,R31
	add_w	R2,R4,R2
	add_l	R1,R6,R1
	add_l	R0,R7,R0
	add_l	R3,R7,R3
	llsi_l	R1,0x3,R24
	add_l	R24,R5,R27
	addi_l	R31,0x8,R31
	ldzi_l	__pcons2,R24
	ldri_f	R27,0x0,R25
	cvtfd	R25,R25
	ldri_f	R27,0x4,R27
	cvtfd	R27,R27
	strri_d	R27,R31,-0x8
	call	_printf
	subi_l	R31,0x8,R31
	ldzi_l	__pcons1,R24
	call	_printf
	add_w	R2,R4,R2
	add_l	R1,R6,R1
	add_l	R0,R7,R0
	add_l	R3,R7,R3
	ldri_w	R30,-0x6,R24
	cmp_w	R2,R24
	ble	Printcomplex_L2
; EXIT
; .temp1 at stkloc 0 (0x0) size 36
	ldri_l	R30,0x0,R0
	ldri_l	R30,0x4,R1
	ldri_l	R30,0x8,R2
	ldri_l	R30,0xc,R3
	ldri_l	R30,0x10,R4
	ldri_l	R30,0x14,R5
	ldri_l	R30,0x18,R6
	ldri_l	R30,0x1c,R7
	ldri_l	R30,0x20,R28
	mov_l	R30,R31
	ldri_l	R31,-0x4,R30
	subi_l	R31,0x4,R31
	ret	
;     }
; ****** Warning: Symbol ``arg1'' (function Printcomplex) was defined, but not used
; ****** Warning: Symbol ``arg2'' (function Printcomplex) was defined, but not used
; void
; Uniform11(iy, yfl) int iy; float yfl;
	.global _Uniform11
_Uniform11:
	addi_l	R31,0x4,R31
	strri_l	R30,R31,-0x4
	mov_l	R31,R30
; ENTRY
; iy at argloc 0 (0x0) in reg  size 2
	cvtdf	R25,R24
; yfl at argloc 0 (0x0) in reg  size 4
;     {
;     iy = (4855*iy + 1731) & 8191;
;     yfl = iy/8192.0;
; EXIT
	mov_l	R30,R31
	ldri_l	R31,-0x4,R30
	subi_l	R31,0x4,R31
	ret	
;     }  
; void
; Exptab(n, e) int n; struct complex e[];
	.global _Exptab
_Exptab:
	addi_l	R31,0x4,R31
	strri_l	R30,R31,-0x4
	mov_l	R31,R30
	addi_l	R31,0x98,R31
	strri_l	R0,R30,0x68
	strri_l	R1,R30,0x6c
	strri_l	R2,R30,0x70
	strri_l	R3,R30,0x74
	strri_l	R4,R30,0x78
	strri_l	R5,R30,0x7c
	strri_l	R6,R30,0x80
	strri_l	R7,R30,0x84
	strri_l	R8,R30,0x88
	strri_l	R9,R30,0x8c
	strri_l	R10,R30,0x90
	strri_l	R11,R30,0x94
; ENTRY
	mov_w	R24,R2
; n at argloc 0 (0x0) in reg  size 2
	mov_l	R25,R3
; e at argloc 0 (0x0) in reg  size 4
; theta in reg  size 4
; divisor in reg  size 4
; h at stkloc 0 (0x0) size 104
; i in reg  size 2
; j in reg  size 2
; k in reg  size 2
; l in reg  size 2
; m in reg  size 2
; .otmp37 in reg  size 4
; .otmp38 in reg  size 4
; .otmp39 in reg  size 4
; .otmp40 in reg  size 4
; .otmp41 in reg  size 4
; .otmp42 in reg  size 4
; .otmp43 in reg  size 4
; .otmp44 in reg  size 2
; .otmp45 in reg  size 2
; .otmp46 in reg  size 4
; .otmp47 in reg  size 4
; .otmp48 in reg  size 2
; .otmp49 in reg  size 4
; .otmp50 in reg  size 4
; .otmp51 in reg  size 4
; .otmp52 in reg  size 4
; .otmp53 in reg  size 4
; .otmp54 in reg  size 4
; .otmp55 in reg  size 4
; .otmp56 in reg  size 4
; .otmp57 in reg  size 4
; .otmp58 in reg  size 4
; .otmp59 in reg  size 2
; .otmp60 in reg  size 2
; .otmp61 in reg  size 2
; .otmp62 in reg  size 2
; .otmp63 in reg  size 4
;     {  
;     float theta, divisor, h[26];
;     int i, j, k, l, m;
;     theta = 3.1415926536;
;     divisor = 4.0;
;     for ( i=1; i <= 25; i++ )
;         {
;         h[i] = 1/(2*Cos( theta/divisor ));
;         divisor = divisor + divisor;
;         }
;     m = n / 2 ;
;     l = m / 2 ;
;     j = 1 ;
;     e[1].rp = 1.0 ;
;     e[1].ip = 0.0;
;     e[l+1].rp = 0.0;
;     e[l+1].ip = 1.0 ;
;     e[m+1].rp = -1.0 ;
;     e[m+1].ip = 0.0 ;
;     do {
;         i = l / 2 ;
;         k = i ;
;         do {
; .otmp64 in reg  size 2
; .otmp65 in reg  size 2
; .otmp66 in reg  size 2
; .otmp67 in reg  size 4
; .otmp68 in reg  size 4
; .otmp69 in reg  size 4
; .otmp70 in reg  size 4
; .otmp71 in reg  size 4
;             e[k+1].rp = h[j]*(e[k+i+1].rp+e[k-i+1].rp) ;
;             e[k+1].ip = h[j]*(e[k+i+1].ip+e[k-i+1].ip) ;
;             k = k+l ;
; .otmp72 in reg  size 4
; .otmp73 in reg  size 4
; .otmp74 in reg  size 4
; .otmp75 in reg  size 4
; .otmp76 in reg  size 4
;         } while ( k <= m );
;         j = Min0( j+1, 25);
;         l = i ;
;     } while ( l > 1 );
	ldzi_f	__fcons5,R1
	addi_l	R30,0x4,R0
Exptab_L1:
	ldzi_f	__fcons6,R24
	div_f	R24,R1,R24
	cvtfd	R24,R24
	call	_Cos
	ldzi_f	__fconsf2,R25
	mul_f	R24,R25,R25
	ldzi_f	__fconsf1,R24
	div_f	R24,R25,R24
	strri_f	R24,R0,0x0
	add_f	R1,R1,R1
	addi_l	R0,0x4,R0
	addi_l	R30,0x64,R24
	cmp_l	R0,R24
	ble	Exptab_L1
	divi_w	R2,0x2,R4
	divi_w	R4,0x2,R1
	movi_w	0x1,R24
	ldzi_f	__fconsf1,R25
	strri_f	R25,R3,0x8
	ldzi_f	__fconsf0,R25
	strri_f	R25,R3,0xc
	addi_w	R1,0x1,R25
	cvtswl	R25,R25
	llsi_l	R25,0x3,R25
	add_l	R25,R3,R26
	ldzi_f	__fconsf0,R25
	strri_f	R25,R26,0x0
	ldzi_f	__fconsf1,R25
	strri_f	R25,R26,0x4
	addi_w	R4,0x1,R25
	cvtswl	R25,R25
	llsi_l	R25,0x3,R25
	add_l	R25,R3,R25
	ldzi_f	__fcons4,R26
	strri_f	R26,R25,0x0
	ldzi_f	__fconsf0,R26
	strri_f	R26,R25,0x4
Exptab_L3:
	divi_w	R1,0x2,R10
	cvtswl	R24,R25
	llsi_l	R25,0x2,R25
	add_l	R30,R25,R6
	addi_w	R10,0x1,R25
	add_w	R10,R10,R26
	sub_w	R4,R10,R27
	addi_w	R27,0x1,R27
	sub_w	R10,R10,R0
	addi_w	R0,0x1,R0
	cvtswl	R0,R0
	llsi_l	R0,0x3,R0
	cvtswl	R1,R1
	llsi_l	R1,0x3,R9
	llsi_l	R27,0x3,R27
	add_l	R0,R3,R2
	add_l	R27,R3,R11
	addi_l	R2,0x4,R0
	addi_w	R26,0x1,R26
	cvtswl	R26,R26
	llsi_l	R26,0x3,R26
	add_l	R26,R3,R26
	addi_l	R26,0x4,R27
	cvtswl	R25,R25
	llsi_l	R25,0x3,R25
	add_l	R25,R3,R25
	addi_l	R25,0x4,R1
Exptab_L5:
	ldri_f	R6,0x0,R7
	ldri_f	R2,0x0,R8
	ldri_f	R26,0x0,R5
	add_f	R5,R8,R5
	mul_f	R7,R5,R5
	strri_f	R5,R25,0x0
	ldri_f	R0,0x0,R8
	ldri_f	R27,0x0,R5
	add_f	R5,R8,R5
	mul_f	R7,R5,R5
	strri_f	R5,R1,0x0
	add_l	R2,R9,R2
	add_l	R0,R9,R0
	add_l	R26,R9,R26
	add_l	R27,R9,R27
	add_l	R25,R9,R25
	add_l	R1,R9,R1
	cmp_l	R2,R11
	ble	Exptab_L5
	addi_w	R24,0x1,R24
	movi_w	0x19,R25
	call	_Min0
	mov_w	R10,R1
	cmpi_w	R10,0x1
	bgt	Exptab_L3
; EXIT
; .temp2 at stkloc 104 (0x68) size 48
	ldri_l	R30,0x68,R0
	ldri_l	R30,0x6c,R1
	ldri_l	R30,0x70,R2
	ldri_l	R30,0x74,R3
	ldri_l	R30,0x78,R4
	ldri_l	R30,0x7c,R5
	ldri_l	R30,0x80,R6
	ldri_l	R30,0x84,R7
	ldri_l	R30,0x88,R8
	ldri_l	R30,0x8c,R9
	ldri_l	R30,0x90,R10
	ldri_l	R30,0x94,R11
	mov_l	R30,R31
	ldri_l	R31,-0x4,R30
	subi_l	R31,0x4,R31
	ret	
;     }  
; void
; Fft( n, z, w, e, sqrinv)
;     int n; struct complex z[], w[]; struct complex e[]; float sqrinv;
	.global _Fft
_Fft:
	addi_l	R31,0x4,R31
	strri_l	R30,R31,-0x4
	mov_l	R31,R30
	addi_l	R31,0x44,R31
	strri_l	R0,R30,0x0
	strri_l	R1,R30,0x4
	strri_l	R2,R30,0x8
	strri_l	R3,R30,0xc
	strri_l	R4,R30,0x10
	strri_l	R5,R30,0x14
	strri_l	R6,R30,0x18
	strri_l	R7,R30,0x1c
	strri_l	R8,R30,0x20
	strri_l	R9,R30,0x24
	strri_l	R10,R30,0x28
	strri_l	R11,R30,0x2c
	strri_l	R12,R30,0x30
	strri_l	R13,R30,0x34
	strri_l	R14,R30,0x38
	strri_l	R15,R30,0x3c
	strri_l	R16,R30,0x40
; ENTRY
; n at argloc 0 (0x0) in reg  size 2
; z at argloc 0 (0x0) in reg  size 4
; w at argloc 0 (0x0) in reg  size 4
; e at argloc 0 (0x0) in reg  size 4
	ldri_d	R30,-0xc,R0
	cvtdf	R0,R8
; sqrinv at argloc -12 (0xfffffff4) in reg  size 4
; i in reg  size 2
; j in reg  size 2
; k in reg  size 2
; l in reg  size 2
; m in reg  size 2
; index in reg  size 2
; .otmp77 in reg  size 4
; .otmp78 in reg  size 4
; .otmp79 in reg  size 4
; .otmp80 in reg  size 4
; .otmp81 in reg  size 2
; .otmp82 in reg  size 2
; .otmp83 in reg  size 2
; .otmp84 in reg  size 2
; .otmp85 in reg  size 2
; .otmp86 in reg  size 2
; .otmp87 in reg  size 2
; .otmp88 in reg  size 2
; .otmp89 in reg  size 4
; .otmp90 in reg  size 4
; .otmp91 in reg  size 4
; .otmp92 in reg  size 4
; .otmp93 in reg  size 4
; .otmp94 in reg  size 4
; .otmp95 in reg  size 4
; .otmp96 in reg  size 4
; .otmp97 in reg  size 4
; .otmp98 in reg  size 4
; .otmp99 in reg  size 4
; .otmp100 in reg  size 4
; .otmp101 in reg  size 2
; .otmp102 in reg  size 4
; .otmp103 in reg  size 4
; .otmp104 in reg  size 4
; .otmp105 in reg  size 4
; .otmp106 in reg  size 4
; .otmp107 in reg  size 4
; .otmp108 in reg  size 4
; .otmp109 in reg  size 4
; .otmp110 in reg  size 4
; .otmp111 in reg  size 4
; .otmp112 in reg  size 4
; .otmp113 in reg  size 4
; .otmp114 in reg  size 4
; .otmp115 in reg  size 4
; .otmp116 in reg  size 4
; .otmp117 in reg  size 2
; .otmp118 in reg  size 4
;     {
;     int i, j, k, l, m, index;
;     m = n / 2 ;
;     l = 1 ;
;     do {
;         k = 0 ;
;         j = l ;
;         i = 1 ;
;         do {
; .otmp119 in reg  size 4
; .otmp120 in reg  size 4
;             do {
;                 w[i+k].rp = z[i].rp+z[m+i].rp ;
;                 w[i+k].ip = z[i].ip+z[m+i].ip ;
; .otmp121 in reg  size 4
;                 w[i+j].rp = e[k+1].rp*(z[i].rp-z[i+m].rp)
; .otmp122 in reg  size 4
;                 -e[k+1].ip*(z[i].ip-z[i+m].ip) ;
;                 w[i+j].ip = e[k+1].rp*(z[i].ip-z[i+m].ip)
;                 +e[k+1].ip*(z[i].rp-z[i+m].rp) ;
;                 i = i+1 ;
;             } while ( i <= j );
;             k = j ;
;             j = k+l ;
;         } while ( j <= m );
;           index = 1;
;         do {
; .otmp123 in reg  size 4
; .otmp124 in reg  size 4
;             z[index] = w[index];
;             index = index+1;
; .otmp125 in reg  size 4
;         } while ( index <= n );
;         l = l+l ;
;     } while ( l <= m );
;     for ( i = 1; i <= n; i++ )
; .otmp126 in reg  size 4
;         {
;         z[i].rp = sqrinv*z[i].rp ;
;         z[i].ip = -sqrinv*z[i].ip;
; .otmp127 in reg  size 4
;         }
	divi_w	R24,0x2,R11
	movi_w	0x1,R5
Fft_L2:
	movi_w	0x0,R7
	movi_w	0x1,R4
	addi_w	R11,0x1,R0
	cvtswl	R0,R0
	llsi_l	R0,0x3,R0
	add_l	R0,R25,R2
	addi_l	R2,0x4,R1
	movi_l	0x8,R0
	add_l	R0,R25,R3
	addi_l	R3,0x4,R0
	mov_w	R5,R6
Fft_L4:
	add_w	R4,R7,R9
	cvtswl	R9,R9
	llsi_l	R9,0x3,R9
	add_l	R9,R26,R12
	ldri_f	R3,0x0,R13
	ldri_f	R2,0x0,R10
	add_f	R13,R10,R9
	strri_f	R9,R12,0x0
	addi_l	R12,0x4,R12
	ldri_f	R0,0x0,R15
	ldri_f	R1,0x0,R9
	add_f	R15,R9,R14
	strri_f	R14,R12,0x0
	add_w	R4,R6,R12
	cvtswl	R12,R12
	llsi_l	R12,0x3,R12
	add_l	R12,R26,R16
	addi_w	R7,0x1,R12
	cvtswl	R12,R12
	llsi_l	R12,0x3,R12
	add_l	R12,R27,R14
	ldri_f	R14,0x0,R12
	sub_f	R13,R10,R10
	mul_f	R12,R10,R13
	ldri_f	R14,0x4,R14
	sub_f	R15,R9,R15
	mul_f	R14,R15,R9
	sub_f	R13,R9,R9
	strri_f	R9,R16,0x0
	mul_f	R14,R10,R9
	mul_f	R12,R15,R10
	add_f	R10,R9,R9
	strri_f	R9,R16,0x4
	addi_w	R4,0x1,R4
	addi_l	R2,0x8,R2
	addi_l	R1,0x8,R1
	addi_l	R3,0x8,R3
	addi_l	R0,0x8,R0
	cmp_w	R4,R6
	ble	Fft_L4
	add_w	R6,R5,R9
	cmp_w	R9,R11
	mov_l	R6,R7
	mov_l	R9,R6
	ble	Fft_L4
	llsi_l	R24,0x3,R2
	movi_l	0x8,R0
	add_l	R0,R25,R0
	movi_l	0x8,R1
	add_l	R1,R26,R1
	add_l	R2,R26,R3
Fft_L8:
	ldri_d	R1,0x0,R6
	strri_d	R6,R0,0x0
	addi_l	R1,0x8,R1
	addi_l	R0,0x8,R0
	cmp_l	R1,R3
	ble	Fft_L8
	add_w	R5,R5,R5
	cmp_w	R5,R11
	ble	Fft_L2
	movi_w	0x1,R26
	cmp_w	R26,R24
	bgt	Fft_L9
	neg_f	R8,R26
	movi_l	0x8,R24
	add_l	R24,R25,R24
	add_l	R2,R25,R27
	addi_l	R24,0x4,R25
Fft_L10:
	ldri_f	R24,0x0,R0
	mul_f	R0,R8,R0
	strri_f	R0,R24,0x0
	ldri_f	R25,0x0,R0
	mul_f	R26,R0,R0
	strri_f	R0,R25,0x0
	addi_l	R24,0x8,R24
	addi_l	R25,0x8,R25
	cmp_l	R24,R27
	ble	Fft_L10
Fft_L9:
; EXIT
; .temp3 at stkloc 0 (0x0) size 68
	ldri_l	R30,0x0,R0
	ldri_l	R30,0x4,R1
	ldri_l	R30,0x8,R2
	ldri_l	R30,0xc,R3
	ldri_l	R30,0x10,R4
	ldri_l	R30,0x14,R5
	ldri_l	R30,0x18,R6
	ldri_l	R30,0x1c,R7
	ldri_l	R30,0x20,R8
	ldri_l	R30,0x24,R9
	ldri_l	R30,0x28,R10
	ldri_l	R30,0x2c,R11
	ldri_l	R30,0x30,R12
	ldri_l	R30,0x34,R13
	ldri_l	R30,0x38,R14
	ldri_l	R30,0x3c,R15
	ldri_l	R30,0x40,R16
	mov_l	R30,R31
	ldri_l	R31,-0x4,R30
	subi_l	R31,0x4,R31
	ret	
;     }
; void
; Oscar()
	.global _Oscar
_Oscar:
	addi_l	R31,0x4,R31
	strri_l	R30,R31,-0x4
	mov_l	R31,R30
	addi_l	R31,0xc,R31
	strri_l	R0,R30,0x0
	strri_l	R1,R30,0x4
	strri_l	R2,R30,0x8
; ENTRY
; i in reg  size 2
; .otmp128 in reg  size 4
; .otmp129 in reg  size 4
; .otmp130 in reg  size 2
; .otmp131 in reg  size 2
; .otmp132 in reg  size 2
; .otmp133 in reg  size 4
; {  
; int i;
; Exptab( 256 ,e) ;
; seed = 5767 ;
; for ( i = 1; i <= 256 ; i++ )
;     {
;     Uniform11( seed, zr );
;     Uniform11( seed, zi );
;     z[i].rp = 20.0*zr - 10.0;
;     z[i].ip = 20.0*zi - 10.0;
; .otmp134 in reg  size 4
;     }
;     for ( i = 1; i <= 20; i++ ) {
;        Fft( 256 ,z,w,e,0.0625) ;
;     }
	movi_w	0x100,R24
	ldzi_l	__pcons10,R25
	call	_Exptab
	stizi_w	0x1687,_seed
	ldzi_l	__pcons11,R0
	ldzi_l	__pcons12,R1
Oscar_L1:
	ldzi_w	_seed,R24
	ldzi_f	_zr,R25
	cvtfd	R25,R25
	call	_Uniform11
	ldzi_w	_seed,R24
	ldzi_f	_zi,R25
	cvtfd	R25,R25
	call	_Uniform11
	ldzi_f	_zr,R24
	cvtfd	R24,R26
	ldzi_d	__dcons7,R24
	mul_d	R26,R24,R26
	ldzi_d	__dcons8,R24
	sub_d	R26,R24,R24
	cvtdf	R24,R24
	strri_f	R24,R1,0x0
	ldzi_f	_zi,R24
	cvtfd	R24,R24
	ldzi_d	__dcons7,R26
	mul_d	R24,R26,R24
	ldzi_d	__dcons8,R26
	sub_d	R24,R26,R24
	cvtdf	R24,R24
	strri_f	R24,R0,0x0
	addi_l	R0,0x8,R0
	addi_l	R1,0x8,R1
	ldzi_l	__lcons13,R24
	cmp_l	R0,R24
	ble	Oscar_L1
	movi_w	0x1,R0
Oscar_L2:
	addi_l	R31,0x8,R31
	movi_w	0x100,R24
	ldzi_l	__pcons14,R25
	ldzi_l	__pcons15,R26
	ldzi_l	__pcons10,R27
	ldzi_d	__dcons9,R1
	strri_d	R1,R31,-0x8
	call	_Fft
	subi_l	R31,0x8,R31
	addi_w	R0,0x1,R0
	cmpi_w	R0,0x14
	ble	Oscar_L2
; EXIT
; .temp4 at stkloc 0 (0x0) size 12
	ldri_l	R30,0x0,R0
	ldri_l	R30,0x4,R1
	ldri_l	R30,0x8,R2
	mov_l	R30,R31
	ldri_l	R31,-0x4,R30
	subi_l	R31,0x4,R31
	ret	
	.segment fft_bss,memtype=1,locinc=1,wordsize=8
fft_V21:
	.global _zi
_zi:
	.bss 4
; zi size 4
	.global _e
_e:
	.bss 1040
; e size 1040
	.global _zr
_zr:
	.bss 4
; zr size 4
	.global _w
_w:
	.bss 2056
; w size 2056
	.global _z
_z:
	.bss 2056
; z size 2056
	.extern _seed
	.extern _printf
	.segment fft_data_const,memtype=1,locinc=1,wordsize=8,rom
__pcons15:
	.data .byte3(_w)
	.data .byte2(_w)
	.data .byte1(_w)
	.data .byte0(_w)
__pcons14:
	.data .byte3(_z)
	.data .byte2(_z)
	.data .byte1(_z)
	.data .byte0(_z)
__lcons13:
	.data .byte3(_z+2052)
	.data .byte2(_z+2052)
	.data .byte1(_z+2052)
	.data .byte0(_z+2052)
__pcons12:
	.data .byte3(_z+8)
	.data .byte2(_z+8)
	.data .byte1(_z+8)
	.data .byte0(_z+8)
__pcons11:
	.data .byte3(_z+12)
	.data .byte2(_z+12)
	.data .byte1(_z+12)
	.data .byte0(_z+12)
__pcons10:
	.data .byte3(_e)
	.data .byte2(_e)
	.data .byte1(_e)
	.data .byte0(_e)
__dcons9:
	.data 0x3f
	.data 0xb0
	.data 0x0
	.data 0x0
	.data 0x0
	.data 0x0
	.data 0x0
	.data 0x0
__dcons8:
	.data 0x40
	.data 0x24
	.data 0x0
	.data 0x0
	.data 0x0
	.data 0x0
	.data 0x0
	.data 0x0
__dcons7:
	.data 0x40
	.data 0x34
	.data 0x0
	.data 0x0
	.data 0x0
	.data 0x0
	.data 0x0
	.data 0x0
__fconsf0:
	.data 0x0
	.data 0x0
	.data 0x0
	.data 0x0
__fconsf2:
	.data 0x40
	.data 0x0
	.data 0x0
	.data 0x0
__fcons6:
	.data 0x40
	.data 0x49
	.data 0xf
	.data 0xda
__fcons5:
	.data 0x40
	.data 0x80
	.data 0x0
	.data 0x0
__fcons4:
	.data 0xbf
	.data 0x80
	.data 0x0
	.data 0x0
__dcons3:
	.data 0x40
	.data 0xc0
	.data 0x0
	.data 0x0
	.data 0x0
	.data 0x0
	.data 0x0
	.data 0x0
__pcons2:
	.data .byte3(fft_V3)
	.data .byte2(fft_V3)
	.data .byte1(fft_V3)
	.data .byte0(fft_V3)
__pcons1:
	.data .byte3(fft_V2)
	.data .byte2(fft_V2)
	.data .byte1(fft_V2)
	.data .byte0(fft_V2)
__fconsf1:
	.data 0x3f
	.data 0x80
	.data 0x0
	.data 0x0
	.segment fft_istrings_const,memtype=1,locinc=1,wordsize=8,rom
fft_V2:
	.data 0xa
	.data 0x0
fft_V3:
	.data 0x20
	.data 0x20
	.data 0x25
	.data 0x31
	.data 0x35
	.data 0x2e
	.data 0x33
	.data 0x65
	.data 0x25
	.data 0x31
	.data 0x35
	.data 0x2e
	.data 0x33
	.data 0x65
	.data 0x0
	.segment _idesc,memtype=1,locinc=1,wordsize=8,rom
	.data 0x0
	.data 0x0
	.data 0x0
	.data 0x0
	.data .byte3(fft_V21)
	.data .byte2(fft_V21)
	.data .byte1(fft_V21)
	.data .byte0(fft_V21)
	.data 0x0
	.data 0x0
	.data 0x14
	.data 0x28


Back to Archelon's Home Page


Back to Archelon's Home Page