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] |
-- -------------------------- 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] |