This is the mail archive of the gdb-patches@sources.redhat.com mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

RFA: bug fixes for sh64 simulator


-- 
--------------------------
SuperH
2430 Aztec West / Almondsbury / BRISTOL / BS32 4AQ
T:+44 1454 462330
This patch fixes a number of bugs and omissions in the sh64 simulator.

Thu Jun 13 23:20:33 2002  J"orn Rennecke <joern.rennecke@superh.com>

cgen:
	* cpu/sh64-compact.cpu (movw5): Use Correct operand field for reg.
	* cpu/sh64-media.cpu (-ldhi-byte, -ldhi-word, -ldhi-long): New macros.
	(-ldlo-byte, -ldlo-word, -ldlo-long): Likewise.
	(-sthi-word, -sthi-long -stlo-byte, -stlo-word, -stlo-long): Likewise.
	(ldhil, ldhiq, ldlol, ldloq, stlol, stloq): Implement.
	(mshfhib, mshfhil, mshfhiw, mshflob, mshflol, mshflow): Fix indices.
	(-sthi-byte): If there is a single byte to store, store it at proper
	address.
	(sthil, sthiq): Fix big-endian behaviour.
sim/sh64:
	* arch.c, arch.h, cpu.c, cpu.h, cpuall.h, decode-compact.c: Regenerate.
	* decode-compact.h, decode-media.c, decode-media.h: Likewise.
	* defs-compact.h, defs-media.h, sem-compact-switch.c: Likewise.
	* sem-compact.c, sem-media-switch.c, sem-media.c, sh-desc.c: Likewise.
	* sh-desc.h, sh-opc.h: Likewise.


Index: cpu/sh64-compact.cpu
===================================================================
RCS file: /cvs/src/src/cgen/cpu/sh64-compact.cpu,v
retrieving revision 1.1
diff -p -r1.1 sh64-compact.cpu
*** cpu/sh64-compact.cpu	1 Feb 2002 11:32:02 -0000	1.1
--- cpu/sh64-compact.cpu	13 Jun 2002 19:05:13 -0000
***************
*** 1228,1236 ****
  
  (dshci movw5 "Store word to memory (register indirect w/ displacement)"
         ()
!        "mov.w r0, @($imm4x2, $rn)"
!        (+ (f-op8 #x81) rn imm4x2)
!        (set (mem HI (add rn imm4x2)) (subword HI r0 1)))
  
  (dshci movw6 "Load word from memory (register indirect w/ zero displacement)"
         ()
--- 1228,1236 ----
  
  (dshci movw5 "Store word to memory (register indirect w/ displacement)"
         ()
!        "mov.w r0, @($imm4x2, $rm)"
!        (+ (f-op8 #x81) rm imm4x2)
!        (set (mem HI (add rm imm4x2)) (subword HI r0 1)))
  
  (dshci movw6 "Load word from memory (register indirect w/ zero displacement)"
         ()
Index: cpu/sh64-media.cpu
===================================================================
RCS file: /cvs/src/src/cgen/cpu/sh64-media.cpu,v
retrieving revision 1.1
diff -p -r1.1 sh64-media.cpu
*** cpu/sh64-media.cpu	1 Feb 2002 11:32:02 -0000	1.1
--- cpu/sh64-media.cpu	13 Jun 2002 19:05:13 -0000
***************
*** 1,5 ****
--- 1,6 ----
  ; Hitachi SHmedia instruction set description.  -*- Scheme -*-
  ; Copyright (C) 2000, 2001 Red Hat, Inc.
+ ; Copyright (C) 2002 SuperH Ltd
  ; This file is part of CGEN.
  ; See file COPYING.CGEN for details.
  
***************
*** 759,791 ****
         (+ (f-op 33) rm disp10 rd (f-rsvd 0))
         (set rd (ext DI (mem HI (add rm (ext DI disp10x2))))))
  
  (dshmi ldhil "Load high part (long word)"
         ()
         "ldhi.l $rm, $disp6, $rd"
         (+ (f-op 48) rm (f-ext 6) disp6 rd (f-rsvd 0))
!        ; FIXME.
!        (unimp "ldhil"))
  
  (dshmi ldhiq "Load high part (quad word)"
         ()
         "ldhi.q $rm, $disp6, $rd"
         (+ (f-op 48) rm (f-ext 7) disp6 rd (f-rsvd 0))
!        ; FIXME.
!        (unimp "ldhiq"))
  
  (dshmi ldlol "Load low part (long word)"
         ()
         "ldlo.l $rm, $disp6, $rd"
         (+ (f-op 48) rm (f-ext 2) disp6 rd (f-rsvd 0))
!        ; FIXME.
!        (unimp "ldlol"))
  
  (dshmi ldloq "Load low part (quad word)"
         ()
         "ldlo.q $rm, $disp6, $rd"
         (+ (f-op 48) rm (f-ext 3) disp6 rd (f-rsvd 0))
!        ; FIXME;
!        (unimp "ldloq"))
  
  (dshmi ldxb "Load byte (extended displacement)"
         ()
--- 760,881 ----
         (+ (f-op 33) rm disp10 rd (f-rsvd 0))
         (set rd (ext DI (mem HI (add rm (ext DI disp10x2))))))
  
+ (define-pmacro (-ldhi-byte)
+   (if (and bytecount 1)
+       (set val (add (sll val 8) (zext DI (mem QI addr))))))
+ 
+ (define-pmacro (-ldhi-word)
+   (if (and bytecount 2)
+       (set val (add (sll val 16) (zext DI (mem HI (and addr -4)))))))
+ 
+ (define-pmacro (-ldhi-long)
+   (if (and bytecount 4)
+       (set val (add (sll val 32) (zext DI (mem SI (and addr -8)))))))
+ 
  (dshmi ldhil "Load high part (long word)"
         ()
         "ldhi.l $rm, $disp6, $rd"
         (+ (f-op 48) rm (f-ext 6) disp6 rd (f-rsvd 0))
!        (sequence ((DI addr) (QI bytecount) (SI val))
! 		 (set addr (add rm disp6))
! 		 (set bytecount (add (and addr 3) 1))
! 		 (set val 0)
! 		 (if (and bytecount 4)
! 		     (set rd (ext DI (mem SI (and addr -4))))
! 		     (if endian
! 			 (sequence () ; Big endian.
! 				   (-ldhi-word)
! 				   (-ldhi-byte)
! 				   (set rd (ext DI val)))
! 			 (sequence () ; Little endian.
! 				   (-ldhi-byte)
! 				   (-ldhi-word)
! 				   (set rd
! 					(ext DI
! 					 (sll SI val
! 					      (sub 32 (mul 8 bytecount))))))))))
  
  (dshmi ldhiq "Load high part (quad word)"
         ()
         "ldhi.q $rm, $disp6, $rd"
         (+ (f-op 48) rm (f-ext 7) disp6 rd (f-rsvd 0))
!        (sequence ((DI addr) (QI bytecount) (DI val))
! 		 (set addr (add rm disp6))
! 		 (set bytecount (add (and addr 7) 1))
! 		 (set val 0)
! 		 (if (and bytecount 8)
! 		     (set rd (mem DI (and addr -8)))
! 		     (if endian
! 			 (sequence () ; Big endian.
! 				   (-ldhi-long)
! 				   (-ldhi-word)
! 				   (-ldhi-byte)
! 				   (set rd val))
! 			 (sequence () ; Little endian.
! 				   (-ldhi-byte)
! 				   (-ldhi-word)
! 				   (-ldhi-long)
! 				   (set rd
! 					(sll val
! 					     (sub 64 (mul 8 bytecount)))))))))
! 
! (define-pmacro (-ldlo-byte)
!   (if (and bytecount 1)
!       (set val (add (sll val 8) (zext DI (mem QI addr))))))
! 
! (define-pmacro (-ldlo-word)
!   (if (and bytecount 2)
!       (set val (add (sll val 16) (zext DI (mem HI (and (add addr 1) -2)))))))
! 
! (define-pmacro (-ldlo-long)
!   (if (and bytecount 4)
!       (set val (add (sll val 32) (zext DI (mem SI (and (add addr 3) -4)))))))
  
  (dshmi ldlol "Load low part (long word)"
         ()
         "ldlo.l $rm, $disp6, $rd"
         (+ (f-op 48) rm (f-ext 2) disp6 rd (f-rsvd 0))
!        (sequence ((DI addr) (QI bytecount) (SI val))
! 		 (set addr (add rm disp6))
! 		 (set bytecount (sub 4 (and addr 3)))
! 		 (set val 0)
! 		 (if (and bytecount 4)
! 		     (set rd (ext DI (mem SI addr)))
! 		     (if endian
! 			 (sequence () ; Big endian.
! 				   (-ldlo-byte)
! 				   (-ldlo-word)
! 				   (set rd
! 					(ext DI
! 					 (sll SI val
! 					      (sub 32 (mul 8 bytecount))))))
! 			 (sequence () ; Little endian.
! 				   (-ldlo-word)
! 				   (-ldlo-byte)
! 				   (set rd (ext DI val)))))))
  
  (dshmi ldloq "Load low part (quad word)"
         ()
         "ldlo.q $rm, $disp6, $rd"
         (+ (f-op 48) rm (f-ext 3) disp6 rd (f-rsvd 0))
!        (sequence ((DI addr) (QI bytecount) (DI val))
! 		 (set addr (add rm disp6))
! 		 (set bytecount (sub 8 (and addr 7)))
! 		 (set val 0)
! 		 (if (and bytecount 8)
! 		     (set rd (mem DI addr))
! 		     (if endian
! 			 (sequence () ; Big endian.
! 				   (-ldlo-byte)
! 				   (-ldlo-word)
! 				   (-ldlo-long)
! 				   (set rd
! 					(sll val (sub 64 (mul 8 bytecount)))))
! 			 (sequence () ; Little endian.
! 				   (-ldlo-long)
! 				   (-ldlo-word)
! 				   (-ldlo-byte)
! 				   (set rd val))))))
  
  (dshmi ldxb "Load byte (extended displacement)"
         ()
***************
*** 1228,1241 ****
         (+ (f-op 11) rm (f-ext 4) rn rd (f-rsvd 0))
         (sequence ((QI result7) (QI result6) (QI result5) (QI result4)
  		  (QI result3) (QI result2) (QI result1) (QI result0))
! 		 (set result0 (subword QI rm 4))
! 		 (set result1 (subword QI rn 4))
! 		 (set result2 (subword QI rm 5))
! 		 (set result3 (subword QI rn 5))
! 		 (set result4 (subword QI rm 6))
! 		 (set result5 (subword QI rn 6))
! 		 (set result6 (subword QI rm 7))
! 		 (set result7 (subword QI rn 7))
  		 (set rd (-join-qi result7 result6 result5 result4 result3
  				 result2 result1 result0))))
  
--- 1318,1331 ----
         (+ (f-op 11) rm (f-ext 4) rn rd (f-rsvd 0))
         (sequence ((QI result7) (QI result6) (QI result5) (QI result4)
  		  (QI result3) (QI result2) (QI result1) (QI result0))
! 		 (set result0 (subword QI rm 3))
! 		 (set result1 (subword QI rn 3))
! 		 (set result2 (subword QI rm 2))
! 		 (set result3 (subword QI rn 2))
! 		 (set result4 (subword QI rm 1))
! 		 (set result5 (subword QI rn 1))
! 		 (set result6 (subword QI rm 0))
! 		 (set result7 (subword QI rn 0))
  		 (set rd (-join-qi result7 result6 result5 result4 result3
  				 result2 result1 result0))))
  
***************
*** 1244,1251 ****
         "mshfhi.l $rm, $rn, $rd"
         (+ (f-op 11) rm (f-ext 6) rn rd (f-rsvd 0))
         (sequence ((SI result1) (SI result0))
! 		 (set result0 (subword SI rm 1))
! 		 (set result1 (subword SI rn 1))
  		 (set rd (-join-si result1 result0))))
  
  (dshmi mshfhiw "Multimedia shuffle higher-half (word)"
--- 1334,1341 ----
         "mshfhi.l $rm, $rn, $rd"
         (+ (f-op 11) rm (f-ext 6) rn rd (f-rsvd 0))
         (sequence ((SI result1) (SI result0))
! 		 (set result0 (subword SI rm 0))
! 		 (set result1 (subword SI rn 0))
  		 (set rd (-join-si result1 result0))))
  
  (dshmi mshfhiw "Multimedia shuffle higher-half (word)"
***************
*** 1253,1262 ****
         "mshfhi.w $rm, $rn, $rd"
         (+ (f-op 11) rm (f-ext 5) rn rd (f-rsvd 0))
         (sequence ((HI result3) (HI result2) (HI result1) (HI result0))
! 		 (set result0 (subword HI rm 2))
! 		 (set result1 (subword HI rn 2))
! 		 (set result2 (subword HI rm 3))
! 		 (set result3 (subword HI rn 3))
  		 (set rd (-join-hi result3 result2 result1 result0))))
  
  (dshmi mshflob "Multimedia shuffle lower-half (byte)"
--- 1343,1352 ----
         "mshfhi.w $rm, $rn, $rd"
         (+ (f-op 11) rm (f-ext 5) rn rd (f-rsvd 0))
         (sequence ((HI result3) (HI result2) (HI result1) (HI result0))
! 		 (set result0 (subword HI rm 1))
! 		 (set result1 (subword HI rn 1))
! 		 (set result2 (subword HI rm 0))
! 		 (set result3 (subword HI rn 0))
  		 (set rd (-join-hi result3 result2 result1 result0))))
  
  (dshmi mshflob "Multimedia shuffle lower-half (byte)"
***************
*** 1265,1278 ****
         (+ (f-op 11) rm (f-ext 0) rn rd (f-rsvd 0))
         (sequence ((QI result7) (QI result6) (QI result5) (QI result4)
  		  (QI result3) (QI result2) (QI result1) (QI result0))
! 		 (set result0 (subword QI rm 0))
! 		 (set result1 (subword QI rn 0))
! 		 (set result2 (subword QI rm 1))
! 		 (set result3 (subword QI rn 1))
! 		 (set result4 (subword QI rm 2))
! 		 (set result5 (subword QI rn 2))
! 		 (set result6 (subword QI rm 3))
! 		 (set result7 (subword QI rn 3))
  		 (set rd (-join-qi result7 result6 result5 result4 result3
  				 result2 result1 result0))))
  
--- 1355,1368 ----
         (+ (f-op 11) rm (f-ext 0) rn rd (f-rsvd 0))
         (sequence ((QI result7) (QI result6) (QI result5) (QI result4)
  		  (QI result3) (QI result2) (QI result1) (QI result0))
! 		 (set result0 (subword QI rm 7))
! 		 (set result1 (subword QI rn 7))
! 		 (set result2 (subword QI rm 6))
! 		 (set result3 (subword QI rn 6))
! 		 (set result4 (subword QI rm 5))
! 		 (set result5 (subword QI rn 5))
! 		 (set result6 (subword QI rm 4))
! 		 (set result7 (subword QI rn 4))
  		 (set rd (-join-qi result7 result6 result5 result4 result3
  				 result2 result1 result0))))
  
***************
*** 1281,1288 ****
         "mshflo.l $rm, $rn, $rd"
         (+ (f-op 11) rm (f-ext 2) rn rd (f-rsvd 0))
         (sequence ((SI result1) (SI result0))
! 		 (set result0 (subword SI rm 0))
! 		 (set result1 (subword SI rn 0))
  		 (set rd (-join-si result1 result0))))
  
  (dshmi mshflow "Multimedia shuffle lower-half (word)"
--- 1371,1378 ----
         "mshflo.l $rm, $rn, $rd"
         (+ (f-op 11) rm (f-ext 2) rn rd (f-rsvd 0))
         (sequence ((SI result1) (SI result0))
! 		 (set result0 (subword SI rm 1))
! 		 (set result1 (subword SI rn 1))
  		 (set rd (-join-si result1 result0))))
  
  (dshmi mshflow "Multimedia shuffle lower-half (word)"
***************
*** 1290,1299 ****
         "mshflo.w $rm, $rn, $rd"
         (+ (f-op 11) rm (f-ext 1) rn rd (f-rsvd 0))
         (sequence ((HI result3) (HI result2) (HI result1) (HI result0))
! 		 (set result0 (subword HI rm 0))
! 		 (set result1 (subword HI rn 0))
! 		 (set result2 (subword HI rm 1))
! 		 (set result3 (subword HI rn 1))
  		 (set rd (-join-hi result3 result2 result1 result0))))
  
  (define-pmacro (-mshlldl arg) (sll arg (and rn 31)))
--- 1380,1389 ----
         "mshflo.w $rm, $rn, $rd"
         (+ (f-op 11) rm (f-ext 1) rn rd (f-rsvd 0))
         (sequence ((HI result3) (HI result2) (HI result1) (HI result0))
! 		 (set result0 (subword HI rm 3))
! 		 (set result1 (subword HI rn 3))
! 		 (set result2 (subword HI rm 2))
! 		 (set result3 (subword HI rn 2))
  		 (set rd (-join-hi result3 result2 result1 result0))))
  
  (define-pmacro (-mshlldl arg) (sll arg (and rn 31)))
***************
*** 1569,1578 ****
         (set (mem HI (add rm (ext DI disp10x2))) (and HI rd #xffff)))
  
  (define-pmacro (-sthi-byte)
!   (sequence ()
! 	    (set (mem UQI addr) (and QI val #xff))
! 	    (set val (srl val 8))
! 	    (set addr (add addr 1))))
  
  (dshmi sthil "Store high part (long word)"
        ()
--- 1659,1680 ----
         (set (mem HI (add rm (ext DI disp10x2))) (and HI rd #xffff)))
  
  (define-pmacro (-sthi-byte)
!   (if (and bytecount 1)
!       (sequence ()
! 		(set (mem UQI addr) (and QI val #xff))
! 		(set val (srl val 8)))))
! 
! (define-pmacro (-sthi-word)
!   (if (and bytecount 2)
!       (sequence ()
! 		(set (mem HI (and addr -4)) (and HI val #xffff))
! 		(set val (srl val 16)))))
! 
! (define-pmacro (-sthi-long)
!   (if (and bytecount 4)
!       (sequence ()
! 		(set (mem SI (and addr -8)) (and SI val #xffffffff))
! 		(set val (srl val 32)))))
  
  (dshmi sthil "Store high part (long word)"
        ()
***************
*** 1581,1598 ****
         (sequence ((DI addr) (QI bytecount) (DI val))
  		 (set addr (add rm disp6))
  		 (set bytecount (add (and addr 3) 1))
! 		 (if endian
! 		     (set val rd)
! 		     (set val (srl rd (sub 32 (mul 8 bytecount)))))
! 		 (set addr (add (sub addr bytecount) 1))
! 		 (if (gt bytecount 3)
! 		     (-sthi-byte))
! 		 (if (gt bytecount 2)
! 		     (-sthi-byte))
! 		 (if (gt bytecount 1)
! 		     (-sthi-byte))
! 		 (if (gt bytecount 0)
! 		     (-sthi-byte))))
  
  (dshmi sthiq "Store high part (quad word)"
         ()
--- 1683,1700 ----
         (sequence ((DI addr) (QI bytecount) (DI val))
  		 (set addr (add rm disp6))
  		 (set bytecount (add (and addr 3) 1))
! 		 (if (and bytecount 4)
! 		     (set (mem SI (and addr -4)) rd)
! 		     (if endian
! 			 (sequence ()
! 				   ; Big endian.
! 				   (set val rd)
! 				   (-sthi-byte)
! 				   (-sthi-word))
! 			 (sequence ()
! 				   (set val (srl rd (sub 32 (mul 8 bytecount))))
! 				   (-sthi-word)
! 				   (-sthi-byte))))))
  
  (dshmi sthiq "Store high part (quad word)"
         ()
***************
*** 1601,1640 ****
         (sequence ((DI addr) (QI bytecount) (DI val))
  		 (set addr (add rm disp6))
  		 (set bytecount (add (and addr 7) 1))
! 		 (if endian
! 		     (set val rd)
! 		     (set val (srl rd (sub 64 (mul 8 bytecount)))))
! 		 (set addr (add (sub addr bytecount) 1))
! 		 (if (gt bytecount 7)
! 		     (-sthi-byte))
! 		 (if (gt bytecount 6)
! 		     (-sthi-byte))
! 		 (if (gt bytecount 5)
! 		     (-sthi-byte))
! 		 (if (gt bytecount 4)
! 		     (-sthi-byte))
! 		 (if (gt bytecount 3)
! 		     (-sthi-byte))
! 		 (if (gt bytecount 2)
! 		     (-sthi-byte))
! 		 (if (gt bytecount 1)
! 		     (-sthi-byte))
! 		 (if (gt bytecount 0)
! 		     (-sthi-byte))))
  
  (dshmi stlol "Store low part (long word)"
         ()
         "stlo.l $rm, $disp6, $rd"
         (+ (f-op 56) rm (f-ext 2) disp6 rd (f-rsvd 0))
!        ; FIXME.
!        (unimp "stlol"))
  
  (dshmi stloq "Store low part (quad word)"
         ()
         "stlo.q $rm, $disp6, $rd"
         (+ (f-op 56) rm (f-ext 3) disp6 rd (f-rsvd 0))
!        ; FIXME.
!        (unimp "stloq"))
  
  (dshmi stxb "Store byte (extended displacement)"
         ()
--- 1703,1779 ----
         (sequence ((DI addr) (QI bytecount) (DI val))
  		 (set addr (add rm disp6))
  		 (set bytecount (add (and addr 7) 1))
! 		 (if (and bytecount 8)
! 		     (set (mem DI (and addr -8)) rd)
! 		     (if endian
! 			 (sequence ()
! 				   (set val rd)
! 				   (-sthi-byte)
! 				   (-sthi-word)
! 				   (-sthi-long))
! 			 (sequence ()
! 				   (set val (srl rd (sub 64 (mul 8 bytecount))))
! 				   (-sthi-long)
! 				   (-sthi-word)
! 				   (-sthi-byte))))))
! 
! (define-pmacro (-stlo-byte)
!   (if (and bytecount 1)
!       (sequence ()
! 		(set (mem UQI addr) (and QI val #xff))
! 		(set val (srl val 8)))))
! 
! (define-pmacro (-stlo-word)
!   (if (and bytecount 2)
!       (sequence ()
! 		(set (mem UHI (and (add addr 1) -2)) (and HI val #xffff))
! 		(set val (srl val 16)))))
! 
! (define-pmacro (-stlo-long)
!   (if (and bytecount 4)
!       (sequence ()
! 		(set (mem USI (and (add addr  3) -4)) (and SI val #xffffffff))
! 		(set val (srl val 32)))))
  
  (dshmi stlol "Store low part (long word)"
         ()
         "stlo.l $rm, $disp6, $rd"
         (+ (f-op 56) rm (f-ext 2) disp6 rd (f-rsvd 0))
!        (sequence ((DI addr) (QI bytecount) (DI val))
! 		 (set addr (add rm disp6))
! 		 (set bytecount (sub 4 (and addr 3)))
! 		 (if (and bytecount 4)
! 		     (set (mem USI addr) rd)
! 		     (if endian
! 			 (sequence ()
! 				   (set val (srl rd (sub 32 (mul 8 bytecount))))
! 				   (-stlo-word)
! 				   (-stlo-byte))
! 			 (sequence ()
! 				   (set val rd)
! 				   (-stlo-byte)
! 				   (-stlo-word))))))
  
  (dshmi stloq "Store low part (quad word)"
         ()
         "stlo.q $rm, $disp6, $rd"
         (+ (f-op 56) rm (f-ext 3) disp6 rd (f-rsvd 0))
!        (sequence ((DI addr) (QI bytecount) (DI val))
! 		 (set addr (add rm disp6))
! 		 (set bytecount (sub 8 (and addr 7)))
! 		 (if (and bytecount 8)
! 		     (set (mem UDI addr) rd)
! 		     (if endian
! 			 (sequence ()
! 				   (set val (srl rd (sub 64 (mul 8 bytecount))))
! 				   (-stlo-long)
! 				   (-stlo-word)
! 				   (-stlo-byte))
! 			 (sequence ()
! 				   (set val rd)
! 				   (-stlo-byte)
! 				   (-stlo-word)
! 				   (-stlo-long))))))
  
  (dshmi stxb "Store byte (extended displacement)"
         ()

Attachment: 06.gz
Description: GNU Zip compressed data


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]