illegal code for SH-1 cpu

Joel Sherrill joel@OARcorp.com
Mon Jul 6 06:30:00 GMT 1998


The RTEMS newlib 1.8.0 patch includes a fix for this.  I have attached the
entire patch.  I have not yet generated a patch for 1.8.1.

I hope it helps.

--joel
Joel Sherrill                    Director of Research & Development
joel@OARcorp.com                 On-Line Applications Research
Ask me about RTEMS: a free RTOS  Huntsville AL 35805
   Support Available             (205) 722-9985




On Sun, 5 Jul 1998, Jens Decker wrote:

> Hello!
> 
> I've compiled newlib-1.8.1 for use with a SH-7032 board (SH-1 cpu kernel):
> 
> ./configure -v --target=sh-coff --prefix=/usr/local/sh-coff
> --host=i586-unknown-linux --norecursion
> 
> Debugging some initial test programs (I'm not very experienced with gcc
> used for embedded systems) I got illegal opcode messages and found that
> memset.S from newlib/libc/machine/sh indeed uses dt <reg> commands which
> are only available for SH-2 and better cpu kernels.
> 
> My workaround was a substitution of the dt opcodes:
> 
> !
> ! Fast SH memset
> !
> ! by Toshiyasu Morita (tm@netcom.com)
> !
> ! Entry: r4: destination pointer
> !        r5: fill value
> !        r6: byte count
> !
> ! Exit:  r0-r3: trashed
> !
> 
> #include "asm.h"
> 
> ENTRY(memset)
> 	mov	r4,r3	! Save return value
> 
> 	mov	r6,r0	! Check explicitly for zero
> 	cmp/eq	#0,r0
> 	bt	L_exit
> 
> 	mov	#12,r0	! Check for small number of bytes
> 	cmp/gt	r6,r0
> 	bt	L_store_byte_loop
> 
> 	neg	r4,r0	! Align destination
> 	add	#4,r0
> 	and	#3,r0
> 	tst	r0,r0
> 	bt	L_dup_bytes
> 	.balignw 4,0x0009
> L_align_loop:
> 	mov.b	r5,@r4
> 	add	#-1,r6
> 	add	#1,r4
> 	add     #-1,r0  ! Substitute for dt r0
> 	cmp/eq  #0,r0   ! Substitute for dt r0
> 	bf	L_align_loop
> 
> L_dup_bytes:
> 	extu.b	r5,r5	! Duplicate bytes across longword
> 	swap.b	r5,r0
> 	or	r0,r5
> 	swap.w	r5,r0
> 	or	r0,r5
> 
> 	mov	r6,r2	! Calculate number of double longwords
> 	shlr2	r2
> 	shlr	r2
> 
> 	.balignw 4,0x0009
> L_store_long_loop:
> 	mov.l	r5,@r4	! Store double longs to memory
>         add     #-1,r2  ! Substitute for dt r2
> 	tst     r2,r2   ! Substitute for dt r2
> 	mov.l	r5,@(4,r4)
> 	add	#8,r4
> 	bf	L_store_long_loop
> 
> 	mov	#7,r0
> 	and	r0,r6
> 	tst	r6,r6
> 	bt	L_exit
> 	.balignw 4,0x0009
> L_store_byte_loop:
> 	mov.b	r5,@r4	! Store bytes to memory
> 	add	#1,r4
> 	add     #-1,r6  ! Substitute for dt r6
> 	tst     r6,r6   ! Substitute for dt r6
> 	bf	L_store_byte_loop
> 
> L_exit:
> 	rts
> 	mov	r3,r0
> 
> Thank you very much for this really good development system!
> 
> Yours,
> 
> Jens Decker
> 
> 
> -- 
> 
> ___________________________________________________________
> 
> * Jens Decker                                             *
> * Universitaet Regensburg                                 *
> * Institut fuer Physikalische und Theoretische Chemie     *
> * Lehrst. Prof. Dick                                      *
> * Universitaetstr. 31                                     *
> * 93059 Regensburg                                        *
> *                                                         *
> * Tel: +49-941/943-4473, -4458 Fax: -4488  Room: 22.2.14  *
> * Email: Jens.Decker@chemie.uni-regensburg.de             *
> * WWW (coming up): http://                                *
> * rchsg41.chemie.uni-regensburg.de/group/Jens.Decker.html *
> ___________________________________________________________
> 


More information about the Newlib mailing list