[patch] xstormy16 semantics

DJ Delorie <[email protected]>
Newsgroups gmane.comp.emulators.sid.devel,gmane.comp.tools.cgen.devel
Message-ID <[email protected]>
This fixes numerous bugs found by Sanyo.  Ok?

2003-01-20  DJ Delorie  <[email protected]>

	* xstormy16.cpu (set-psw-rrotate17): New.  Choose the correct set
	of 16 patterns from the set-psw-rotate17 function.
	(movgrigr, movgripostincgr, movgripredecgr, movgriigr,
	movgriipostincgr, movgriipredecgr): Set psw correctly.
	(movfgrigr, movfgripostincgr, movfgripredecgr, movfgriigr,
	movfgriipostincgr, movfgriipredecgr): Fix semantics.
	(rrcgrgr, rrcgrimm4): Use new set-psw-rrotate17 function.

Index: xstormy16.cpu
===================================================================
RCS file: /cvs/src/src/cgen/cpu/xstormy16.cpu,v
retrieving revision 1.5
diff -p -3 -r1.5 xstormy16.cpu
*** xstormy16.cpu	17 Dec 2002 03:54:41 -0000	1.5
--- xstormy16.cpu	20 Jan 2003 23:20:39 -0000
***************
*** 1,5 ****
  ; xstormy16 CPU core description. -*- Scheme -*-
! ; Copyright (C) 2001, 2002 Red Hat, Inc.
  ; This file is part of CGEN.
  ; See file COPYING.CGEN for details.
  
--- 1,5 ----
  ; xstormy16 CPU core description. -*- Scheme -*-
! ; Copyright (C) 2001, 2002, 2003 Red Hat, Inc.
  ; This file is part of CGEN.
  ; See file COPYING.CGEN for details.
  
***************
*** 488,493 ****
--- 488,498 ----
      (set tmpfoo (rol tmpfoo (and rot #x1F)))
      (set-psw-carry (reg HI h-gr index) index (trunc HI tmpfoo) (and (srl tmpfoo 16) 1))))
  
+ ; We have to be careful to get the right group of 16 shifts from the above.
+ (define-pmacro (set-psw-rrotate17 Rd index src c rot)
+   (set-psw-rotate17 Rd index src c (sub 47 (mod (add (and rot #xf) 15) 17)))
+   )
+ 
  
  ; Move Operations
  
***************
*** 619,625 ****
  	       (if ws2
  		   (set-alignfix-mem Rs Rdm)
  		   (set (mem QI Rs) Rdm))
! 	       (set-psw-nowrite (index-of Rs) Rs))
       ()
  )
  
--- 624,630 ----
  	       (if ws2
  		   (set-alignfix-mem Rs Rdm)
  		   (set (mem QI Rs) Rdm))
! 	       (set-psw-nowrite (index-of Rdm) Rdm))
       ()
  )
  
***************
*** 632,638 ****
  	       (if ws2
  		   (set-alignfix-mem Rs Rdm)
  		   (set (mem QI Rs) Rdm))
! 	       (set-psw Rs (index-of Rs) (add Rs (add ws2 1))))
       ()
  )
  
--- 637,644 ----
  	       (if ws2
  		   (set-alignfix-mem Rs Rdm)
  		   (set (mem QI Rs) Rdm))
! 	       (set-psw-nowrite (index-of Rdm) Rdm)
! 	       (set Rs (add Rs (add ws2 1))))
       ()
  )
  
***************
*** 642,648 ****
       ("mov$ws2 (--$Rs),$Rdm")
       (+ OP1_6 OP2A_A ws2 Rs OP4M_0 Rdm)
       (sequence ()
! 	       (set-psw Rs (index-of Rs) (sub Rs (add ws2 1)))
  	       (if ws2
  		   (set-alignfix-mem Rs Rdm)
  		   (set (mem QI Rs) Rdm)))
--- 648,655 ----
       ("mov$ws2 (--$Rs),$Rdm")
       (+ OP1_6 OP2A_A ws2 Rs OP4M_0 Rdm)
       (sequence ()
! 	       (set Rs (sub Rs (add ws2 1)))
! 	       (set-psw-nowrite (index-of Rdm) Rdm)
  	       (if ws2
  		   (set-alignfix-mem Rs Rdm)
  		   (set (mem QI Rs) Rdm)))
***************
*** 695,701 ****
  	       (if ws2
  		   (set-alignfix-mem (add Rs imm12) Rdm)
  		   (set (mem QI (add Rs imm12)) Rdm))
! 	       (set-psw Rs (index-of Rs) Rs))
       ()
  )
  
--- 702,708 ----
  	       (if ws2
  		   (set-alignfix-mem (add Rs imm12) Rdm)
  		   (set (mem QI (add Rs imm12)) Rdm))
! 	       (set-psw-nowrite (index-of Rdm) Rdm))
       ()
  )
  
***************
*** 708,714 ****
  	       (if ws2
  		   (set-alignfix-mem (add Rs imm12) Rdm)
  		   (set (mem QI (add Rs imm12)) Rdm))
! 	       (set-psw Rs (index-of Rs) (add Rs 1)))
       ()
  )
  
--- 715,722 ----
  	       (if ws2
  		   (set-alignfix-mem (add Rs imm12) Rdm)
  		   (set (mem QI (add Rs imm12)) Rdm))
! 	       (set-psw-nowrite (index-of Rdm) Rdm)
! 	       (set Rs (add Rs 1)))
       ()
  )
  
***************
*** 718,724 ****
       ("mov$ws2 (--$Rs,$imm12),$Rdm")
       (+ OP1_6 OP2A_A ws2 Rs OP4M_1 Rdm OP5_0 imm12)
       (sequence ()
! 	       (set-psw Rs (index-of Rs) (sub Rs 1))
  	       (if ws2
  		   (set-alignfix-mem (add Rs imm12) Rdm)
  		   (set (mem QI (add Rs imm12)) Rdm)))
--- 726,733 ----
       ("mov$ws2 (--$Rs,$imm12),$Rdm")
       (+ OP1_6 OP2A_A ws2 Rs OP4M_1 Rdm OP5_0 imm12)
       (sequence ()
! 	       (set Rs (sub Rs 1))
! 	       (set-psw-nowrite (index-of Rdm) Rdm)
  	       (if ws2
  		   (set-alignfix-mem (add Rs imm12) Rdm)
  		   (set (mem QI (add Rs imm12)) Rdm)))
***************
*** 844,852 ****
       (+ OP1_7 OP2A_6 ws2 Rs OP4M_0 Rdm)
       (sequence ()
  	       (if ws2
! 		   (set-psw Rs (index-of Rs) (alignfix-mem (join SI HI R8 Rdm)))
! 		   (set-psw Rs (index-of Rs) (and #xFF (mem QI (join SI HI R8 Rdm)))))
! 	       (set-psw Rs (index-of Rs) Rs))
       ()
  )
  
--- 853,861 ----
       (+ OP1_7 OP2A_6 ws2 Rs OP4M_0 Rdm)
       (sequence ()
  	       (if ws2
! 		   (set-alignfix-mem (join SI HI R8 Rs) Rdm)
! 		   (set (mem QI (join SI HI R8 Rs)) Rdm))
! 	       (set-psw-nowrite (index-of Rdm) Rdm))
       ()
  )
  
***************
*** 857,865 ****
       (+ OP1_6 OP2A_6 ws2 Rs OP4M_0 Rdm)
       (sequence ()
  	       (if ws2
! 		   (set-psw Rs (index-of Rs) (alignfix-mem (join SI HI R8 Rdm)))
! 		   (set-psw Rs (index-of Rs) (and #xFF (mem QI (join SI HI R8 Rdm)))))
! 	       (set-psw Rs (index-of Rs) (add Rs (add ws2 1))))
       ()
  )
  
--- 866,875 ----
       (+ OP1_6 OP2A_6 ws2 Rs OP4M_0 Rdm)
       (sequence ()
  	       (if ws2
! 		   (set-alignfix-mem (join SI HI R8 Rs) Rdm)
! 		   (set (mem QI (join SI HI R8 Rs)) Rdm))
! 	       (set-psw-nowrite (index-of Rdm) Rdm)
! 	       (set Rs (add Rs (add ws2 1))))
       ()
  )
  
***************
*** 869,878 ****
       ("movf$ws2 (--$Rs),$Rdm")
       (+ OP1_6 OP2A_E ws2 Rs OP4M_0 Rdm)
       (sequence ()
! 	       (set-psw Rs (index-of Rs) (sub Rs (add ws2 1)))
  	       (if ws2
! 		   (set-psw Rs (index-of Rs) (alignfix-mem (join SI HI R8 Rdm)))
! 		   (set-psw Rs (index-of Rs) (and #xFF (mem QI (join SI HI R8 Rdm))))))
       ()
  )
  
--- 879,889 ----
       ("movf$ws2 (--$Rs),$Rdm")
       (+ OP1_6 OP2A_E ws2 Rs OP4M_0 Rdm)
       (sequence ()
! 	       (set-psw-nowrite (index-of Rdm) Rdm)
! 	       (set Rs (sub Rs (add ws2 1)))
  	       (if ws2
! 		   (set-alignfix-mem (join SI HI R8 Rs) Rdm)
! 		   (set (mem QI (join SI HI R8 Rs)) Rdm)))
       ()
  )
  
***************
*** 923,929 ****
  		   (set (mem HI (and (add (join SI HI Rb Rs) imm12) #xFFFFFFFE))
  			Rdm)
  		   (set (mem QI (add (join SI HI Rb Rs) imm12)) Rdm))
! 	       (set-psw Rs (index-of Rs) Rs))
       ()
  )
  
--- 934,940 ----
  		   (set (mem HI (and (add (join SI HI Rb Rs) imm12) #xFFFFFFFE))
  			Rdm)
  		   (set (mem QI (add (join SI HI Rb Rs) imm12)) Rdm))
! 	       (set-psw-nowrite (index-of Rdm) Rdm))
       ()
  )
  
***************
*** 937,943 ****
  	       (if ws2
  		   (set (mem HI (and (add (join SI HI Rb Rs) imm12) #xFFFFFFFE)) Rdm)
  		   (set (mem QI (add (join SI HI Rb Rs) imm12)) Rdm))
! 	       (set-psw Rs (index-of Rs) (add Rs (add ws2 1))))
       ()
  )
  
--- 948,955 ----
  	       (if ws2
  		   (set (mem HI (and (add (join SI HI Rb Rs) imm12) #xFFFFFFFE)) Rdm)
  		   (set (mem QI (add (join SI HI Rb Rs) imm12)) Rdm))
! 	       (set-psw-nowrite (index-of Rdm) Rdm)
! 	       (set Rs (add Rs (add ws2 1))))
       ()
  )
  
***************
*** 947,953 ****
       ("movf$ws2 ($Rb,--$Rs,$imm12),$Rdm")
       (+ OP1_6 OP2A_E ws2 Rs OP4M_1 Rdm OP5A_0 Rb imm12)
       (sequence ()
! 	       (set-psw Rs (index-of Rs) (sub Rs 1))
  	       (if ws2
  		   (set (mem HI (and (add (join SI HI Rb Rs) imm12) #xFFFFFFFE)) Rdm)
  		   (set (mem QI (add (join SI HI Rb Rs) imm12)) Rdm)))
--- 959,966 ----
       ("movf$ws2 ($Rb,--$Rs,$imm12),$Rdm")
       (+ OP1_6 OP2A_E ws2 Rs OP4M_1 Rdm OP5A_0 Rb imm12)
       (sequence ()
! 	       (set Rs (sub Rs 1))
! 	       (set-psw-nowrite (index-of Rdm) Rdm)
  	       (if ws2
  		   (set (mem HI (and (add (join SI HI Rb Rs) imm12) #xFFFFFFFE)) Rdm)
  		   (set (mem QI (add (join SI HI Rb Rs) imm12)) Rdm)))
***************
*** 1302,1308 ****
       ()
       ("rrc $Rd,$Rs")
       (+ OP1_3 OP2_8 Rs Rd)
!      (set-psw-rotate17 Rd (index-of Rd) Rd psw-cy (neg (and Rs #xF)))
       ()
  )
  
--- 1315,1321 ----
       ()
       ("rrc $Rd,$Rs")
       (+ OP1_3 OP2_8 Rs Rd)
!      (set-psw-rrotate17 Rd (index-of Rd) Rd psw-cy Rs)
       ()
  )
  
***************
*** 1311,1317 ****
       ()
       ("rrc $Rd,#$imm4")
       (+ OP1_3 OP2_9 imm4 Rd)
!      (set-psw-rotate17 Rd (index-of Rd) Rd psw-cy (neg imm4))
       ()
  )
  
--- 1324,1330 ----
       ()
       ("rrc $Rd,#$imm4")
       (+ OP1_3 OP2_9 imm4 Rd)
!      (set-psw-rrotate17 Rd (index-of Rd) Rd psw-cy imm4)
       ()
  )
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.