This is the mail archive of the
sid@sources.redhat.com
mailing list for the SID project.
[patch] xstormy16 semantics
- From: DJ Delorie <dj at redhat dot com>
- To: cgen at sources dot redhat dot com, sid at sources dot redhat dot com
- Date: Mon, 20 Jan 2003 18:22:14 -0500
- Subject: [patch] xstormy16 semantics
This fixes numerous bugs found by Sanyo. Ok?
2003-01-20 DJ Delorie <dj@redhat.com>
* 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)
()
)