From ae55807561cc4c213d1ff8439b831a4bec28b2e2 Mon Sep 17 00:00:00 2001 From: Andrew Cagney Date: Tue, 2 Dec 1997 05:18:27 +0000 Subject: [PATCH] For MACU add unsigned multiply to accumulator. Test. --- sim/d10v/ChangeLog | 5 ++ sim/d10v/simops.c | 12 +++-- sim/testsuite/d10v-elf/.Sanitize | 3 ++ sim/testsuite/d10v-elf/Makefile.in | 4 +- sim/testsuite/d10v-elf/t-mac.s | 77 ++++++++++++++++++++++++++++++ 5 files changed, 96 insertions(+), 5 deletions(-) create mode 100644 sim/testsuite/d10v-elf/t-mac.s diff --git a/sim/d10v/ChangeLog b/sim/d10v/ChangeLog index a5f9e99d791..d801cb2d4f5 100644 --- a/sim/d10v/ChangeLog +++ b/sim/d10v/ChangeLog @@ -1,3 +1,8 @@ +Tue Dec 2 15:01:08 1997 Andrew Cagney + + * simops.c (OP_3A00): For "macu", perform multiply stage using 32 + bit rather than 16 bit precision. + Tue Dec 2 11:04:37 1997 Andrew Cagney * simops.c (OP_1000): For "sub2w", compute carry by comparing diff --git a/sim/d10v/simops.c b/sim/d10v/simops.c index d617cb46d0f..6f12e5a69b1 100644 --- a/sim/d10v/simops.c +++ b/sim/d10v/simops.c @@ -1352,13 +1352,17 @@ OP_1A00 () void OP_3A00 () { - int64 tmp; + uint64 tmp; + uint32 src1; + uint32 src2; trace_input ("macu", OP_ACCUM, OP_REG, OP_REG); - tmp = SEXT40 (State.regs[OP[1]] * State.regs[OP[2]]); + src1 = (uint16) State.regs[OP[1]]; + src2 = (uint16) State.regs[OP[2]]; + tmp = src1 * src2; if (State.FX) - tmp = SEXT40( (tmp << 1) & MASK40); - State.a[OP[0]] = (SEXT40 (State.a[OP[0]]) + tmp) & MASK40; + tmp = (tmp << 1); + State.a[OP[0]] = (State.a[OP[0]] + tmp) & MASK40; trace_output (OP_ACCUM); } diff --git a/sim/testsuite/d10v-elf/.Sanitize b/sim/testsuite/d10v-elf/.Sanitize index eb239ac367d..c93cba1e7f6 100644 --- a/sim/testsuite/d10v-elf/.Sanitize +++ b/sim/testsuite/d10v-elf/.Sanitize @@ -10,9 +10,12 @@ exit47.s hello.s loop.s t-macros.i +t-mac.s t-rachi.s t-rep.s t-subi.s +t-sub2w.s +t-mvtac.s Things-to-lose: diff --git a/sim/testsuite/d10v-elf/Makefile.in b/sim/testsuite/d10v-elf/Makefile.in index 33e22ef1724..d7fc13093c8 100644 --- a/sim/testsuite/d10v-elf/Makefile.in +++ b/sim/testsuite/d10v-elf/Makefile.in @@ -43,7 +43,9 @@ TESTS = \ t-rachi.ok \ t-rep.ok \ t-subi.ok \ - t-sub2w.ok + t-sub2w.ok \ + t-mvtac.ok \ + t-mac.ok AS_FOR_TARGET = `\ if [ -x ../../../gas/as-new ]; then \ diff --git a/sim/testsuite/d10v-elf/t-mac.s b/sim/testsuite/d10v-elf/t-mac.s new file mode 100644 index 00000000000..e4aa182f16d --- /dev/null +++ b/sim/testsuite/d10v-elf/t-mac.s @@ -0,0 +1,77 @@ +.include "t-macros.i" + + start + + ;; clear FX + ldi r2, #0x8005 + mvtc r2, cr0 + + loadacc2 a1 0x7f 0xffff 0xffff + ldi r8, 0xffff + ldi r9, 0x8001 +test_macu1: + MACU a1, r9, r8 + checkacc2 1 a1 0x80 0x8000 0x7FFE + + ;; set FX + ldi r2, #0x8085 + mvtc r2, cr0 + + loadacc2 a1 0x7f 0xffff 0xffff + ldi r8, 0xffff + ldi r9, 0x8001 +test_macu2: + MACU a1, r9, r8 + checkacc2 2 a1 0x81 0x0000 0xfffd + + + + + ;; clear FX + ldi r2, #0x8005 + mvtc r2, cr0 + + loadacc2 a1 0x7f 0xffff 0xffff + ldi r8, 0xffff + ldi r9, 0x7FFF +test_macsu1: + MACSU a1, r9, r8 + checkacc2 3 a1 0x80 0x7FFE 0x8000 + + ;; set FX + ldi r2, #0x8085 + mvtc r2, cr0 + + loadacc2 a1 0x7f 0xffff 0xffff + ldi r8, 0xffff + ldi r9, 0x7FFF +test_macsu2: + MACSU a1, r9, r8 + checkacc2 4 a1 0x80 0xfffd 0x0001 + + ;; clear FX + ldi r2, #0x8005 + mvtc r2, cr0 + + loadacc2 a1 0x7f 0xffff 0xffff + ldi r8, 0xffff + ldi r9, 0x8001 +test_macsu3: + MACSU a1, r9, r8 + checkacc2 5 a1 0x7F 0x8001 0x7FFE + + ;; set FX + ldi r2, #0x8085 + mvtc r2, cr0 + + loadacc2 a1 0x7f 0xffff 0xffff + ldi r8, 0xffff + ldi r9, 0x8001 +test_macsu4: + MACSU a1, r9, r8 + checkacc2 6 a1 0x7f 0x0002 0xFFFD + + exit0 + + + -- 2.30.2