please dont rip this site
/* Assemble this file with "gasp -a rsasm.s | as -o rsasm.o"

/* Fast encoder for (255,223) Reed-Solomon code over GF(256)

/* Called as
/*    rse32(unsigned char data[223],unsigned char parity[32]);

/* This code started as output of gcc -S, then was heavily hand
/* massaged to exploit the Pentium dual pipeline

/* Runs at about 30 megabits/sec on a 133 MHz Pentium

/* Phil Karn, KA9Q July 5, 1997 */
	.comm	Gtab,8192,4

.globl rse32
	.type	 rse32,@function
rse32:
	pushl %ebp
	movl %esp,%ebp
	subl $32,%esp
	pushl %edi
	pushl %esi
	pushl %ebx
	movl 8(%ebp),%ebx	/* -> data
	movl 12(%ebp),%esi	/* -> output parity bytes

/* init parity bytes to zeroes
	movl $7,%eax
.L75:	movl $0,-32(%ebp,%eax,4)
	decl %eax
	jns .L75

	movl $222,%edi		/* number of data bytes
.L80:	xorl %eax,%eax
	movl -4(%ebp),%ecx	/* %ecx = (R31,R30,R29,R28)
	movb (%edi,%ebx),%al	/* %al = data byte
	roll $8,%ecx		/* %ecx = (R30,R29,R28,R31)
	movl -8(%ebp),%edx	/* %edx = (R27,R26,R25,R24)
	xorb %cl,%al		/* %al = R31 ^ data (feedback term)

	shll $8,%edx		/* %edx = (R26,R25,R24,0)
	movb -5(%ebp),%cl	/* %ecx = (R30,R29,R28,R27)
	movb -9(%ebp),%dl	/* %edx = (R26,R25,R24,R23)
	xorl Gtab+7168(,%eax,4),%ecx	/* %ecx = (R31',R30',R29',R28')
	xorl Gtab+6144(,%eax,4),%edx	/* %edx = (R27',R26',R25',R24')
	movl %ecx,-4(%ebp)
	movl %edx,-8(%ebp)

	movl -12(%ebp),%ecx	/* %ecx = (R23,R22,R21,R20)
	movl -16(%ebp),%edx	/* %edx = (R19,R18,R17,R16)
	shll $8,%ecx		/* %ecx = (R22,R21,R20,0)
	shll $8,%edx		/* %edx = (R18,R17,R16,0)
	movb -13(%ebp),%cl	/* %ecx = (R22,R21,R20,R19)
	movb -17(%ebp),%dl	/* %edx = (R18,R17,R16,R15)
	xorl Gtab+5120(,%eax,4),%ecx
	xorl Gtab+4096(,%eax,4),%edx
	movl %ecx,-12(%ebp)
	movl %edx,-16(%ebp)

	movl -20(%ebp),%ecx	/* %ecx = (R15,R14,R13,R12)
	movl -24(%ebp),%edx	/* %edx = (R11,R10,R09,R08)
	shll $8,%ecx		/* %ecx = (R14,R13,R12,0)
	shll $8,%edx		/* %edx = (R10,R09,R08,0)
	movb -21(%ebp),%cl	/* %ecx = (R14,R13,R12,R11)
	movb -25(%ebp),%dl	/* %edx = (R10,R09,R08,R07)
	xorl Gtab+3072(,%eax,4),%ecx
	xorl Gtab+2048(,%eax,4),%edx
	movl %ecx,-20(%ebp)
	movl %edx,-24(%ebp)

	movl -28(%ebp),%ecx	/* %ecx = (R07,R06,R05,R04)
	movl -32(%ebp),%edx	/* %edx = (R03,R02,R01,R00)
	shll $8,%ecx		/* %ecx = (R06,R05,R04,0)
	shll $8,%edx		/* %edx = (R02,R01,R00,0)
	movb -29(%ebp),%cl	/* %ecx = (R06,R05,R04,R03)
	xorl Gtab(,%eax,4),%edx
	xorl Gtab+1024(,%eax,4),%ecx
	movl %edx,-32(%ebp)
	movl %ecx,-28(%ebp)

	decl %edi
	jns .L80

	/* Copy parity bytes to user buffer
	movl $7,%edx
.L85:	movl -32(%ebp,%edx,4),%eax
	movl %eax,(%esi,%edx,4)
	decl %edx
	jns .L85

	xorl %eax,%eax		/* return 0
	leal -44(%ebp),%esp
	popl %ebx
	popl %esi
	popl %edi
	movl %ebp,%esp
	popl %ebp
	ret


/* This macro evaluates the input polynomial (which has 255 elements)
/* at four consecutive values of alpha**n and stores the results
/* The instructions are ordered to avoid address generation interlocks
/* and to encourage parallel execution in the Pentium's two pipelines

/* Input: %esi -> input buffer, 12(%ebp) -> output buffer
/* Uses char Mtab[32][256], a multiplication lookup table
/* trashes eax, ebx, ecx, edx, edi

	.MACRO	DOSYN R
	LOCAL loop
	xorl %eax,%eax
	xorl %ebx,%ebx
	xorl %ecx,%ecx
	xorl %edx,%edx

	movl $254,%edi
loop:	movb Mtab+256*(\R+0)(%eax),%al
	movb (%edi,%esi),%ah
	movb Mtab+256*(\R+1)(%ebx),%bl
	movb Mtab+256*(\R+2)(%ecx),%cl
	movb Mtab+256*(\R+3)(%edx),%dl
	xorb %ah,%al
	xorb %ah,%bl
	xorb %ah,%cl
	xorb %ah,%dl
	xorb %ah,%ah
	decl %edi
	jns loop
	movl 12(%ebp),%edi
	movb %al,\R(%edi)
	movb %bl,\R+1(%edi)
	movb %cl,\R+2(%edi)
	movb %dl,\R+3(%edi)
	.ENDM

	.comm	Mtab,8192,1
.text
.globl rssyndrome
	.type	 rssyndrome,@function
rssyndrome:
	pushl %ebp
	movl %esp,%ebp
	pushl %edi
	pushl %esi
	pushl %ebx
	movl 8(%ebp),%esi

	DOSYN 0
	DOSYN 4
	DOSYN 8
	DOSYN 12
	DOSYN 16
	DOSYN 20
	DOSYN 24
	DOSYN 28

	popl %ebx
	popl %esi
	popl %edi
	popl %ebp
	ret
	.END



Code:


file: /Techref/method/error/rs-255-223-3-pf-qc-1999/rs32asm_s.htm, 3KB, , updated: 2002/11/1 18:02, local time: 2024/11/26 05:02,
TOP NEW HELP FIND: 
18.117.94.77:LOG IN

 ©2024 These pages are served without commercial sponsorship. (No popup ads, etc...).Bandwidth abuse increases hosting cost forcing sponsorship or shutdown. This server aggressively defends against automated copying for any reason including offline viewing, duplication, etc... Please respect this requirement and DO NOT RIP THIS SITE. Questions?
Please DO link to this page! Digg it! / MAKE!

<A HREF="http://massmind.org/Techref/method/error/rs-255-223-3-pf-qc-1999/rs32asm_s.htm"> rs32asm.s</A>

After you find an appropriate page, you are invited to your to this massmind site! (posts will be visible only to you before review) Just type a nice message (short messages are blocked as spam) in the box and press the Post button. (HTML welcomed, but not the <A tag: Instead, use the link box to link to another page. A tutorial is available Members can login to post directly, become page editors, and be credited for their posts.


Link? Put it here: 
if you want a response, please enter your email address: 
Attn spammers: All posts are reviewed before being made visible to anyone other than the poster.
Did you find what you needed?

 

Welcome to massmind.org!

 

Welcome to massmind.org!

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  .