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]

Re: [RFA] New "audio" instructions for fujitsu frv sim


Michael Snyder wrote:
Hi Dave,

Here's the implementation for the fr405 "audio" instructions,
complete with testsuite.

Cheers,
Michael

Oops, and I should have added, opcodes/ChangeLog: * frv-desc.c: Regenerate. * frv-opc.c: Regenerate. * frv-opc.h: Regenerate. * frv-desc.h: Regenerate.

	sim/frv/ChangeLog:
	* decode.c, decode.h, sem.c, model.c, cpu.c, cpu.h,
	arch.c, arch.h, cpuall.h: Regenerate.



------------------------------------------------------------------------

src/cpu/ChangeLog:
2003-10-01  Michael Snyder  <msnyder@redhat.com>

	* frv.cpu: Add iacc0 register.  Add "audio" instructions,
	smu, smass, smsss, slass, scutss, addss, subss.

src/sim/frv/ChangeLog:
2003-10-01  Michael Snyder  <msnyder@redhat.com>

* frv.c (frvbf_shift_left_arith_saturate): New function,
implements semantics for slass instruction.
(frvbf_iacc_cut): New function, implements semantics for scutss instruction.
* frv-sim.h: Export two new functions (above).
* registers.c: Add iacc0h, iacc0l registers.


src/sim/testsuite/ChangeLog:
2003-10-01  Michael Snyder  <msnyder@redhat.com>

	* sim/frv/fr400/addss.cgs: New test file.
	* sim/frv/fr400/movgs.cgs: New test file.
	* sim/frv/fr400/movsg.cgs: New test file.
	* sim/frv/fr400/scutss.cgs: New test file.
	* sim/frv/fr400/slass.cgs: New test file.
	* sim/frv/fr400/smass.cgs: New test file.
	* sim/frv/fr400/smsss.cgs: New test file.
	* sim/frv/fr400/smu.cgs: New test file.
	* sim/frv/fr400/subss.cgs: New test file.

Index: cpu/frv.cpu
===================================================================
RCS file: /cvs/src/src/cpu/frv.cpu,v
retrieving revision 1.13
diff -p -r1.13 frv.cpu
*** cpu/frv.cpu 24 Sep 2003 19:04:54 -0000 1.13
--- cpu/frv.cpu 1 Oct 2003 19:14:21 -0000
***************
*** 1610,1616 ****
(hsr56 72) (hsr57 73) (hsr58 74) (hsr59 75)
(hsr60 76) (hsr61 77) (hsr62 78) (hsr63 79)
! (ccr 256) (cccr 263) (lr 272) (lcr 273) (isr 288)
(neear0 352) (neear1 353) (neear2 354) (neear3 355)
(neear4 356) (neear5 357) (neear6 358) (neear7 359)
--- 1610,1617 ----
(hsr56 72) (hsr57 73) (hsr58 74) (hsr59 75)
(hsr60 76) (hsr61 77) (hsr62 78) (hsr63 79)
! (ccr 256) (cccr 263) (lr 272) (lcr 273) ! (iacc0h 280) (iacc0l 281) (isr 288)
(neear0 352) (neear1 353) (neear2 354) (neear3 355)
(neear4 356) (neear5 357) (neear6 358) (neear7 359)
***************
*** 1955,1960 ****
--- 1956,1963 ----
(define-pmacro (spr-bpcsr) (reg h-spr 2))
(define-pmacro (spr-lr) (reg h-spr 272))
(define-pmacro (spr-lcr) (reg h-spr 273))
+ (define-pmacro (spr-iacc0h) (reg h-spr 280))
+ (define-pmacro (spr-iacc0l) (reg h-spr 281))
(define-pmacro (spr-sr0) (reg h-spr 768))
(define-pmacro (spr-sr1) (reg h-spr 769))
(define-pmacro (spr-sr2) (reg h-spr 770))
***************
*** 2064,2069 ****
--- 2067,2097 ----
(add index 1408)) (trunc USI newval))))
)
+ ; 64-bit signed accumulator. Composed of iacc0h and iacc0l registers
+ ; concatenated, but referenced more often as the composed 64 bits.
+ (define-keyword
+ (name iacc0-names)
+ (print-name h-iacc0)
+ (prefix "")
+ (values (iacc0 0))
+ )
+ + (define-hardware
+ (name h-iacc0)
+ (comment "64 bit signed accumulator")
+ (attrs PROFILE VIRTUAL (MACH fr400))
+ (type register DI (1))
+ (indices extern-keyword iacc0-names)
+ ; The single 64-bit integer accumulator is made up of two 32 bit
+ ; registers, iacc0h and iacc0l. We want to extract this as a
+ ; combined 64 signed bits.
+ (get (idx) (or DI (sll DI (ext DI (spr-iacc0h)) 32) (zext DI (spr-iacc0l))))
+ (set (idx newval)
+ (sequence ()
+ (set (spr-iacc0h) (trunc SI (srl newval 32)))
+ (set (spr-iacc0l) (trunc SI newval))))
+ )
+ ; Integer condition code registers (CCR)
;
; The individual sub registers bits of the CCR are referenced more often than
***************
*** 2602,2607 ****
--- 2630,2686 ----
(multiply-r-r smul ext OP_00 OPE2_08 "signed multiply reg/reg")
(multiply-r-r umul zext OP_00 OPE2_0A "unsigned multiply reg/reg")
+ ; Multiplication with integer accumulator IACC
+ ;
+ + (define-pmacro (iacc-set value) + (set (reg h-iacc0 0) value))
+ + (define-pmacro (iacc-add value) + (set (reg h-iacc0 0)
+ (cond DI
+ ((andif (andif (gt value 0) (gt (reg h-iacc0 0) 0))
+ (lt (sub DI #x7fffffffffffffff value) (reg h-iacc0 0)))
+ ; Positive overflow
+ (const DI #x7fffffffffffffff))
+ ((andif (andif (lt value 0) (lt (reg h-iacc0 0) 0))
+ (gt (sub DI #x8000000000000000 value) (reg h-iacc0 0)))
+ ; Negative overflow
+ (const DI #x8000000000000000))
+ (else
+ (add DI (reg h-iacc0 0) value))))
+ )
+ + (define-pmacro (iacc-sub value) + (set (reg h-iacc0 0)
+ (cond DI
+ ((andif (andif (lt value 0) (gt (reg h-iacc0 0) 0))
+ (lt (add DI #x7fffffffffffffff value) (reg h-iacc0 0)))
+ ; Positive overflow
+ (const DI #x7fffffffffffffff))
+ ((andif (andif (gt value 0) (lt (reg h-iacc0 0) 0))
+ (gt (add DI #x8000000000000000 value) (reg h-iacc0 0)))
+ ; Negative overflow
+ (const DI #x8000000000000000))
+ (else
+ (sub DI (reg h-iacc0 0) value))))
+ )
+ + (define-pmacro (iacc-multiply-r-r name operation op ope comment)
+ (dni name
+ (comment)
+ ((UNIT MULT-DIV) (FR400-MAJOR I-1) (MACH fr400))
+ (.str name "$pack $GRi,$GRj")
+ (+ pack (rd-null) op GRi ope GRj)
+ ((.sym iacc- operation) (mul DI (ext DI GRi) (ext DI GRj)))
+ ((fr400 (unit u-integer)))
+ )
+ )
+ + (iacc-multiply-r-r smu set OP_46 OPE1_05 "Signed multiply reg/reg/iacc")
+ (iacc-multiply-r-r smass add OP_46 OPE1_06 "Signed multiply/add reg/reg/iacc")
+ (iacc-multiply-r-r smsss sub OP_46 OPE1_07 "Signed multiply/sub reg/reg/iacc")
+ (define-pmacro (int-shift-r-r name op ope comment)
(dni name
(comment)
***************
*** 2618,2623 ****
--- 2697,2720 ----
(int-shift-r-r srl OP_01 OPE2_0A "shift right logical reg/reg")
(int-shift-r-r sra OP_01 OPE2_0C "shift right arith reg/reg")
+ (dni slass
+ "shift left arith reg/reg with saturation"
+ ((UNIT IALL) (FR400-MAJOR I-1) (MACH fr400))
+ "slass$pack $GRi,$GRj,$GRk"
+ (+ pack GRk OP_46 GRi OPE1_02 GRj)
+ (set GRk (c-call SI "@cpu@_shift_left_arith_saturate" GRi GRj))
+ ()
+ )
+ + (dni scutss
+ "Integer accumulator cut with saturation"
+ ((UNIT IALL) (FR400-MAJOR I-1) (MACH fr400))
+ "scutss$pack $GRj,$GRk"
+ (+ pack GRk OP_46 (rs-null) OPE1_04 GRj)
+ (set GRk (c-call SI "@cpu@_iacc_cut" (reg h-iacc0 0) GRj))
+ ()
+ )
+ (define-pmacro (scan-semantics arg1 arg2 targ)
(sequence ((WI tmp1) (WI tmp2))
(set tmp1 arg1)
***************
*** 2945,2950 ****
--- 3042,3074 ----
(int-arith-x-cc-r-r addxcc add OP_00 OPE2_03 "Add reg/reg, use/set carry")
(int-arith-x-cc-r-r subxcc sub OP_00 OPE2_07 "Sub reg/reg, use/set carry")
+ + ; Add and subtract with saturation
+ ;
+ (define-pmacro (int-arith-ss-r-r name operation op ope comment)
+ (dni name
+ (comment)
+ ((UNIT IALL) (FR400-MAJOR I-1) (MACH fr400))
+ (.str name "$pack $GRi,$GRj,$GRk")
+ (+ pack GRk op GRi ope GRj)
+ (sequence ()
+ (set GRk (operation GRi GRj))
+ (if ((.sym operation -oflag) GRi GRj (const 0))
+ ; Overflow, saturate.
+ ; Sign of result will be
+ ; same as sign of first operand.
+ (set GRk
+ (cond SI
+ ((gt GRi 0) (const #x7fffffff))
+ ((lt GRi 0) (const #x80000000))
+ (else (const 0)))))
+ )
+ ((fr400 (unit u-integer)))
+ )
+ )
+ + (int-arith-ss-r-r addss add OP_46 OPE1_00 "add reg/reg, with saturation")
+ (int-arith-ss-r-r subss sub OP_46 OPE1_01 "sub reg/reg, with saturation")
; Format: INT, Logic, Shift r-simm
;
Index: sim/frv/frv-sim.h
===================================================================
RCS file: /cvs/src/src/sim/frv/frv-sim.h,v
retrieving revision 1.2
diff -p -r1.2 frv-sim.h
*** sim/frv/frv-sim.h 12 Sep 2003 22:05:21 -0000 1.2
--- sim/frv/frv-sim.h 1 Oct 2003 19:14:24 -0000
*************** extern void frvbf_switch_supervisor_user
*** 104,111 ****
--- 104,114 ----
extern QI frvbf_set_icc_for_shift_left (SIM_CPU *, SI, SI, QI);
extern QI frvbf_set_icc_for_shift_right (SIM_CPU *, SI, SI, QI);
+ /* Insn semantics. */
extern void frvbf_signed_integer_divide (SIM_CPU *, SI, SI, int, int);
extern void frvbf_unsigned_integer_divide (SIM_CPU *, USI, USI, int, int);
+ extern SI frvbf_shift_left_arith_saturate (SIM_CPU *, SI, SI);
+ extern SI frvbf_iacc_cut (SIM_CPU *, DI, SI);
extern void frvbf_clear_accumulators (SIM_CPU *, SI, int);
Index: sim/frv/frv.c
===================================================================
RCS file: /cvs/src/src/sim/frv/frv.c,v
retrieving revision 1.2
diff -p -r1.2 frv.c
*** sim/frv/frv.c 9 Sep 2003 22:28:33 -0000 1.2
--- sim/frv/frv.c 1 Oct 2003 19:14:25 -0000
*************** frvbf_media_cut_ss (SIM_CPU *current_cpu
*** 1027,1032 ****
--- 1027,1091 ----
return frvbf_media_cut (current_cpu, acc, cut_point);
}
+ /* Compute the result of shift-left-arithmetic-with-saturation (SLASS). */
+ SI
+ frvbf_shift_left_arith_saturate (SIM_CPU *current_cpu, SI arg1, SI arg2)
+ {
+ int neg_arg1;
+ + /* FIXME: what to do with negative shift amt? */
+ if (arg2 <= 0)
+ return arg1;
+ + if (arg1 == 0)
+ return 0;
+ + /* Signed shift by 31 or greater saturates by definition. */
+ if (arg2 >= 31)
+ if (arg1 > 0)
+ return (SI) 0x7fffffff;
+ else
+ return (SI) 0x80000000;
+ + /* OK, arg2 is between 1 and 31. */
+ neg_arg1 = (arg1 < 0);
+ do {
+ arg1 <<= 1;
+ /* Check for sign bit change (saturation). */
+ if (neg_arg1 && (arg1 >= 0))
+ return (SI) 0x80000000;
+ else if (!neg_arg1 && (arg1 < 0))
+ return (SI) 0x7fffffff;
+ } while (--arg2 > 0);
+ + return arg1;
+ }
+ + /* Compute the result of int accumulator cut (SCUTSS). */
+ SI
+ frvbf_iacc_cut (SIM_CPU *current_cpu, DI acc, SI cut_point)
+ {
+ /* The cut point is the lower 6 bits (signed) of what we are passed. */
+ cut_point = cut_point << 25 >> 25;
+ + if (cut_point <= -32)
+ cut_point = -31; /* Special case for full shiftout. */
+ + /* Negative cuts (cannot saturate). */
+ if (cut_point < 0)
+ return acc >> (32 + -cut_point);
+ + /* Positive cuts will saturate if significant bits are shifted out. */
+ if (acc != ((acc << cut_point) >> cut_point))
+ if (acc >= 0)
+ return 0x7fffffff;
+ else
+ return 0x80000000;
+ + /* No saturate, just cut. */
+ return ((acc << cut_point) >> 32);
+ }
+ /* Simulate the media custom insns. */
void
frvbf_media_cop (SIM_CPU *current_cpu, int cop_num)
Index: sim/frv/registers.c
===================================================================
RCS file: /cvs/src/src/sim/frv/registers.c,v
retrieving revision 1.2
diff -p -r1.2 registers.c
*** sim/frv/registers.c 12 Sep 2003 22:05:22 -0000 1.2
--- sim/frv/registers.c 1 Oct 2003 19:14:40 -0000
*************** static FRV_SPR_CONTROL_INFO frv_spr[] =
*** 165,174 ****
{0x00000000, 0x00000000, 0x00000000, 0x00000003, IMPL, USER}, /* LR */
{0x00000000, 0x00000000, 0x00000000, 0x00000000, IMPL, USER}, /* LCR */
! /* spr registers 274-287 are reserved */
RESERVED,
RESERVED, RESERVED, RESERVED, RESERVED, RESERVED,
! RESERVED, RESERVED, RESERVED, RESERVED, RESERVED,
RESERVED, RESERVED, RESERVED,
{0xe0000021, 0x20000000, 0xe0000000, 0xffffffc2, IMPL, USER}, /* ISR */
--- 165,177 ----
{0x00000000, 0x00000000, 0x00000000, 0x00000003, IMPL, USER}, /* LR */
{0x00000000, 0x00000000, 0x00000000, 0x00000000, IMPL, USER}, /* LCR */
! /* spr registers 274-279 and 282-287 are reserved. */
! /* spr registers 280 and 281 are iacc0h and iacc0l (fr405). */
RESERVED,
RESERVED, RESERVED, RESERVED, RESERVED, RESERVED,
! {0x00000000, 0x00000000, 0x00000000, 0x00000000, IMPL, USER}, /* IACC0H */
! {0x00000000, 0x00000000, 0x00000000, 0x00000000, IMPL, USER}, /* IACC0L */
! RESERVED, RESERVED, RESERVED,
RESERVED, RESERVED, RESERVED,
{0xe0000021, 0x20000000, 0xe0000000, 0xffffffc2, IMPL, USER}, /* ISR */
*************** static FRV_SPR_CONTROL_INFO fr400_spr[] *** 3141,3150 ****
{0x00000000, 0x00000000, 0x00000003, 0x00000003, IMPL, USER}, /* LR */
{0x00000000, 0x00000000, 0x00000000, 0x00000000, IMPL, USER}, /* LCR */
! /* spr registers 274-287 are reserved */
RESERVED,
RESERVED, RESERVED, RESERVED, RESERVED, RESERVED,
! RESERVED, RESERVED, RESERVED, RESERVED, RESERVED,
RESERVED, RESERVED, RESERVED,
{0x20000021, 0x20000000, 0xa0000000, 0xffffffc2, IMPL, USER}, /* ISR */
--- 3144,3156 ----
{0x00000000, 0x00000000, 0x00000003, 0x00000003, IMPL, USER}, /* LR */
{0x00000000, 0x00000000, 0x00000000, 0x00000000, IMPL, USER}, /* LCR */
! /* spr registers 274-279 and 282-287 are reserved. */
! /* spr registers 280 and 281 are iacc0h and iacc0l (fr405). */
RESERVED,
RESERVED, RESERVED, RESERVED, RESERVED, RESERVED,
! {0x00000000, 0x00000000, 0x00000000, 0x00000000, IMPL, USER}, /* IACC0H */
! {0x00000000, 0x00000000, 0x00000000, 0x00000000, IMPL, USER}, /* IACC0L */
! RESERVED, RESERVED, RESERVED,
RESERVED, RESERVED, RESERVED,
{0x20000021, 0x20000000, 0xa0000000, 0xffffffc2, IMPL, USER}, /* ISR */
Index: sim/testsuite/sim/frv/fr400/addss.cgs
===================================================================
RCS file: sim/testsuite/sim/frv/fr400/addss.cgs
diff -N sim/testsuite/sim/frv/fr400/addss.cgs
*** /dev/null 1 Jan 1970 00:00:00 -0000
--- sim/testsuite/sim/frv/fr400/addss.cgs 1 Oct 2003 19:14:45 -0000
***************
*** 0 ****
--- 1,36 ----
+ # frv testcase for addss $GRi,$GRj,$GRk
+ # mach: fr400
+ + .include "../testutils.inc"
+ + start
+ + .global add
+ add_nosaturate:
+ set_gr_immed 1,gr7
+ set_gr_immed 2,gr8
+ addss gr7,gr8,gr8
+ test_gr_immed 3,gr8
+ add_saturate_pos:
+ set_gr_limmed 0x7fff,0xffff,gr7
+ set_gr_immed 1,gr8
+ addss gr7,gr8,gr8
+ test_gr_limmed 0x7fff,0xffff,gr8
+ + set_gr_limmed 0x4000,0x0000,gr7
+ set_gr_limmed 0x4000,0x0000,gr8
+ addss gr7,gr8,gr8
+ test_gr_limmed 0x7fff,0xffff,gr8
+ + add_saturate_neg:
+ set_gr_limmed 0x8000,0x0000,gr7
+ set_gr_limmed 0xffff,0xffff,gr8
+ addss gr7,gr8,gr8
+ test_gr_limmed 0x8000,0x0000,gr8
+ + set_gr_limmed 0x8000,0x0001,gr7
+ set_gr_limmed 0x8000,0x0001,gr8
+ addss gr7,gr8,gr8
+ test_gr_limmed 0x8000,0x0000,gr8
+ + pass
Index: sim/testsuite/sim/frv/fr400/movgs.cgs
===================================================================
RCS file: sim/testsuite/sim/frv/fr400/movgs.cgs
diff -N sim/testsuite/sim/frv/fr400/movgs.cgs
*** /dev/null 1 Jan 1970 00:00:00 -0000
--- sim/testsuite/sim/frv/fr400/movgs.cgs 1 Oct 2003 19:14:45 -0000
***************
*** 0 ****
--- 1,50 ----
+ # frv testcase for movgs $GRj,iacc0[hl]
+ # mach: fr400
+ + .include "../testutils.inc"
+ + start
+ + .global movgs
+ IACC0H:
+ set_gr_limmed 0xdead,0xbeef,gr8
+ and_spr_immed 0,iacc0h
+ movgs gr8,iacc0h
+ test_gr_limmed 0xdead,0xbeef,gr8
+ test_spr_limmed 0xdead,0xbeef,iacc0h
+ SPR280:
+ ; try alternate names for iacc0h
+ and_spr_immed 0,280
+ movgs gr8,spr[280] ; iacc0h is spr number 280
+ test_gr_limmed 0xdead,0xbeef,gr8
+ test_spr_limmed 0xdead,0xbeef,spr[280]
+ + IACC0L:
+ set_gr_limmed 0xdead,0xbeef,gr8
+ and_spr_immed 0,iacc0l
+ movgs gr8,iacc0l
+ test_gr_limmed 0xdead,0xbeef,gr8
+ test_spr_limmed 0xdead,0xbeef,iacc0l
+ SPR281:
+ ; try alternate names for iacc0l
+ and_spr_immed 0,281
+ movgs gr8,spr[281] ; iacc0l is spr number 281
+ test_gr_limmed 0xdead,0xbeef,gr8
+ test_spr_limmed 0xdead,0xbeef,spr[281]
+ + IACC0L_SPR281:
+ ; try crossing between iacc0l and spr[281]
+ and_spr_immed 0,281
+ and_spr_immed 0,iacc0l
+ movgs gr8,spr[281] ; iacc0l is spr number 281
+ test_gr_limmed 0xdead,0xbeef,gr8
+ test_spr_limmed 0xdead,0xbeef,iacc0l
+ + SPR280_IACC0H:
+ and_spr_immed 0,280
+ and_spr_immed 0,iacc0h
+ movgs gr8,iacc0h ; iacc0h is spr number 280
+ test_gr_limmed 0xdead,0xbeef,gr8
+ test_spr_limmed 0xdead,0xbeef,spr[280]
+ + pass
Index: sim/testsuite/sim/frv/fr400/movsg.cgs
===================================================================
RCS file: sim/testsuite/sim/frv/fr400/movsg.cgs
diff -N sim/testsuite/sim/frv/fr400/movsg.cgs
*** /dev/null 1 Jan 1970 00:00:00 -0000
--- sim/testsuite/sim/frv/fr400/movsg.cgs 1 Oct 2003 19:14:45 -0000
***************
*** 0 ****
--- 1,65 ----
+ # frv testcase for movsg iacc0[hl],$GRj
+ # mach: fr400
+ + .include "../testutils.inc"
+ + start
+ + .global movsg
+ Iacc0h:
+ set_spr_limmed 0xdead,0xbeef,iacc0h
+ set_gr_limmed 0,0,gr8
+ movsg iacc0h,gr8
+ test_gr_limmed 0xdead,0xbeef,gr8
+ test_spr_limmed 0xdead,0xbeef,iacc0h
+ Iacc0l:
+ set_spr_limmed 0xdead,0xbeef,iacc0l
+ set_gr_limmed 0,0,gr8
+ movsg iacc0l,gr8
+ test_gr_limmed 0xdead,0xbeef,gr8
+ test_spr_limmed 0xdead,0xbeef,iacc0l
+ + Spr280:
+ set_spr_limmed 0xdead,0xbeef,spr[280]
+ set_gr_limmed 0,0,gr8
+ movsg spr[280],gr8
+ test_gr_limmed 0xdead,0xbeef,gr8
+ test_spr_limmed 0xdead,0xbeef,spr[280]
+ Spr281:
+ set_spr_limmed 0xdead,0xbeef,spr[281]
+ set_gr_limmed 0,0,gr8
+ movsg spr[281],gr8
+ test_gr_limmed 0xdead,0xbeef,gr8
+ test_spr_limmed 0xdead,0xbeef,spr[281]
+ + Iacc0h_spr280:
+ set_spr_limmed 0xdead,0xbeef,spr[280]
+ set_spr_limmed 0xdead,0xbeef,iacc0h
+ set_gr_limmed 0,0,gr8
+ movsg iacc0h,gr8
+ test_gr_limmed 0xdead,0xbeef,gr8
+ test_spr_limmed 0xdead,0xbeef,spr[280]
+ Iacc0l_spr281:
+ set_spr_limmed 0xdead,0xbeef,spr[281]
+ set_spr_limmed 0xdead,0xbeef,iacc0l
+ set_gr_limmed 0,0,gr8
+ movsg iacc0l,gr8
+ test_gr_limmed 0xdead,0xbeef,gr8
+ test_spr_limmed 0xdead,0xbeef,spr[281]
+ + Spr280_iacc0h:
+ set_spr_limmed 0xdead,0xbeef,spr[280]
+ set_spr_limmed 0xdead,0xbeef,iacc0h
+ set_gr_limmed 0,0,gr8
+ movsg spr[280],gr8
+ test_gr_limmed 0xdead,0xbeef,gr8
+ test_spr_limmed 0xdead,0xbeef,iacc0h
+ Spr281_iacc0l:
+ set_spr_limmed 0xdead,0xbeef,spr[281]
+ set_spr_limmed 0xdead,0xbeef,iacc0l
+ set_gr_limmed 0,0,gr8
+ movsg spr[281],gr8
+ test_gr_limmed 0xdead,0xbeef,gr8
+ test_spr_limmed 0xdead,0xbeef,iacc0l
+ + pass
Index: sim/testsuite/sim/frv/fr400/scutss.cgs
===================================================================
RCS file: sim/testsuite/sim/frv/fr400/scutss.cgs
diff -N sim/testsuite/sim/frv/fr400/scutss.cgs
*** /dev/null 1 Jan 1970 00:00:00 -0000
--- sim/testsuite/sim/frv/fr400/scutss.cgs 1 Oct 2003 19:14:45 -0000
***************
*** 0 ****
--- 1,642 ----
+ # frv testcase for scutss $FRj,$FRk
+ # mach: fr400
+ + .include "../testutils.inc"
+ + start
+ + .global scutss
+ scutss:
+ set_spr_immed 0xffffffe7,iacc0h
+ set_spr_immed 0x89abcdef,iacc0l
+ + set_gr_immed 0,gr10
+ scutss gr10,gr11
+ test_gr_limmed 0xffff,0xffe7,gr11
+ + set_gr_immed 1,gr10
+ scutss gr10,gr11
+ test_gr_limmed 0xffff,0xffcf,gr11
+ + set_gr_immed 2,gr10
+ scutss gr10,gr11
+ test_gr_limmed 0xffff,0xff9e,gr11
+ + set_gr_immed 3,gr10
+ scutss gr10,gr11
+ test_gr_limmed 0xffff,0xff3c,gr11
+ + set_gr_immed 4,gr10
+ scutss gr10,gr11
+ test_gr_limmed 0xffff,0xfe78,gr11
+ + set_gr_immed 5,gr10
+ scutss gr10,gr11
+ test_gr_limmed 0xffff,0xfcf1,gr11
+ + set_gr_immed 6,gr10
+ scutss gr10,gr11
+ test_gr_limmed 0xffff,0xf9e2,gr11
+ + set_gr_immed 7,gr10
+ scutss gr10,gr11
+ test_gr_limmed 0xffff,0xf3c4,gr11
+ + set_gr_immed 8,gr10
+ scutss gr10,gr11
+ test_gr_limmed 0xffff,0xe789,gr11
+ + set_gr_immed 9,gr10
+ scutss gr10,gr11
+ test_gr_limmed 0xffff,0xcf13,gr11
+ + set_gr_immed 10,gr10
+ scutss gr10,gr11
+ test_gr_limmed 0xffff,0x9e26,gr11
+ + set_gr_immed 11,gr10
+ scutss gr10,gr11
+ test_gr_limmed 0xffff,0x3c4d,gr11
+ + set_gr_immed 12,gr10
+ scutss gr10,gr11
+ test_gr_limmed 0xfffe,0x789a,gr11
+ + set_gr_immed 13,gr10
+ scutss gr10,gr11
+ test_gr_limmed 0xfffc,0xf135,gr11
+ + set_gr_immed 14,gr10
+ scutss gr10,gr11
+ test_gr_limmed 0xfff9,0xe26a,gr11
+ + set_gr_immed 15,gr10
+ scutss gr10,gr11
+ test_gr_limmed 0xfff3,0xc4d5,gr11
+ + set_gr_immed 16,gr10
+ scutss gr10,gr11
+ test_gr_limmed 0xffe7,0x89ab,gr11
+ + set_gr_immed 17,gr10
+ scutss gr10,gr11
+ test_gr_limmed 0xffcf,0x1357,gr11
+ + set_gr_immed 18,gr10
+ scutss gr10,gr11
+ test_gr_limmed 0xff9e,0x26af,gr11
+ + set_gr_immed 19,gr10
+ scutss gr10,gr11
+ test_gr_limmed 0xff3c,0x4d5e,gr11
+ + set_gr_immed 20,gr10
+ scutss gr10,gr11
+ test_gr_limmed 0xfe78,0x9abc,gr11
+ + set_gr_immed 21,gr10
+ scutss gr10,gr11
+ test_gr_limmed 0xfcf1,0x3579,gr11
+ + set_gr_immed 22,gr10
+ scutss gr10,gr11
+ test_gr_limmed 0xf9e2,0x6af3,gr11
+ + set_gr_immed 23,gr10
+ scutss gr10,gr11
+ test_gr_limmed 0xf3c4,0xd5e6,gr11
+ + set_gr_immed 24,gr10
+ scutss gr10,gr11
+ test_gr_limmed 0xe789,0xabcd,gr11
+ + set_gr_immed 25,gr10
+ scutss gr10,gr11
+ test_gr_limmed 0xcf13,0x579b,gr11
+ + set_gr_immed 26,gr10
+ scutss gr10,gr11
+ test_gr_limmed 0x9e26,0xaf37,gr11
+ + set_gr_immed 27,gr10
+ scutss gr10,gr11
+ test_gr_limmed 0x8000,0x0000,gr11
+ + set_gr_immed 28,gr10
+ scutss gr10,gr11
+ test_gr_limmed 0x8000,0x0000,gr11
+ + set_gr_immed 29,gr10
+ scutss gr10,gr11
+ test_gr_limmed 0x8000,0x0000,gr11
+ + set_gr_immed 30,gr10
+ scutss gr10,gr11
+ test_gr_limmed 0x8000,0x0000,gr11
+ + set_gr_immed 31,gr10
+ scutss gr10,gr11
+ test_gr_limmed 0x8000,0x0000,gr11
+ + set_gr_immed 32,gr10
+ scutss gr10,gr11
+ test_gr_limmed 0x8000,0x0000,gr11
+ + set_gr_immed 33,gr10
+ scutss gr10,gr11
+ test_gr_limmed 0x8000,0x0000,gr11
+ + set_gr_immed 34,gr10
+ scutss gr10,gr11
+ test_gr_limmed 0x8000,0x0000,gr11
+ + set_gr_immed 35,gr10
+ scutss gr10,gr11
+ test_gr_limmed 0x8000,0x0000,gr11
+ + set_gr_immed 36,gr10
+ scutss gr10,gr11
+ test_gr_limmed 0x8000,0x0000,gr11
+ + set_gr_immed 37,gr10
+ scutss gr10,gr11
+ test_gr_limmed 0x8000,0x0000,gr11
+ + set_gr_immed 38,gr10
+ scutss gr10,gr11
+ test_gr_limmed 0x8000,0x0000,gr11
+ + set_gr_immed 39,gr10
+ scutss gr10,gr11
+ test_gr_limmed 0x8000,0x0000,gr11
+ + set_gr_immed 40,gr10
+ scutss gr10,gr11
+ test_gr_limmed 0x8000,0x0000,gr11
+ + set_gr_immed 41,gr10
+ scutss gr10,gr11
+ test_gr_limmed 0x8000,0x0000,gr11
+ + set_gr_immed 42,gr10
+ scutss gr10,gr11
+ test_gr_limmed 0x8000,0x0000,gr11
+ + set_gr_immed 43,gr10
+ scutss gr10,gr11
+ test_gr_limmed 0x8000,0x0000,gr11
+ + set_gr_immed 44,gr10
+ scutss gr10,gr11
+ test_gr_limmed 0x8000,0x0000,gr11
+ + set_gr_immed 45,gr10
+ scutss gr10,gr11
+ test_gr_limmed 0x8000,0x0000,gr11
+ + set_gr_immed 46,gr10
+ scutss gr10,gr11
+ test_gr_limmed 0x8000,0x0000,gr11
+ + set_gr_immed 47,gr10
+ scutss gr10,gr11
+ test_gr_limmed 0x8000,0x0000,gr11
+ + set_gr_immed 48,gr10
+ scutss gr10,gr11
+ test_gr_limmed 0x8000,0x0000,gr11
+ + set_gr_immed 49,gr10
+ scutss gr10,gr11
+ test_gr_limmed 0x8000,0x0000,gr11
+ + set_gr_immed 50,gr10
+ scutss gr10,gr11
+ test_gr_limmed 0x8000,0x0000,gr11
+ + set_gr_immed 51,gr10
+ scutss gr10,gr11
+ test_gr_limmed 0x8000,0x0000,gr11
+ + set_gr_immed 52,gr10
+ scutss gr10,gr11
+ test_gr_limmed 0x8000,0x0000,gr11
+ + set_gr_immed 53,gr10
+ scutss gr10,gr11
+ test_gr_limmed 0x8000,0x0000,gr11
+ + set_gr_immed 54,gr10
+ scutss gr10,gr11
+ test_gr_limmed 0x8000,0x0000,gr11
+ + set_gr_immed 55,gr10
+ scutss gr10,gr11
+ test_gr_limmed 0x8000,0x0000,gr11
+ + set_gr_immed 56,gr10
+ scutss gr10,gr11
+ test_gr_limmed 0x8000,0x0000,gr11
+ + set_gr_immed 57,gr10
+ scutss gr10,gr11
+ test_gr_limmed 0x8000,0x0000,gr11
+ + set_gr_immed 58,gr10
+ scutss gr10,gr11
+ test_gr_limmed 0x8000,0x0000,gr11
+ + set_gr_immed 59,gr10
+ scutss gr10,gr11
+ test_gr_limmed 0x8000,0x0000,gr11
+ + set_gr_immed 60,gr10
+ scutss gr10,gr11
+ test_gr_limmed 0x8000,0x0000,gr11
+ + set_gr_immed 61,gr10
+ scutss gr10,gr11
+ test_gr_limmed 0x8000,0x0000,gr11
+ + set_gr_immed 62,gr10
+ scutss gr10,gr11
+ test_gr_limmed 0x8000,0x0000,gr11
+ + set_gr_immed 63,gr10
+ scutss gr10,gr11
+ test_gr_limmed 0x8000,0x0000,gr11
+ + set_gr_immed 64,gr10 ; same as -64
+ scutss gr10,gr11
+ test_gr_immed -1,gr11
+ + set_gr_immed 128,gr10 ; same as 0 + scutss gr10,gr11
+ test_gr_limmed 0xffff,0xffe7,gr11
+ + .global scutss2
+ scutss2:
+ set_spr_immed 0xe789abcd,iacc0h
+ set_spr_immed 0xefa5a5a5,iacc0l
+ + set_gr_limmed 0xffff,0xffff,gr10 ; -1
+ scutss gr10,gr11
+ test_gr_limmed 0xf3c4,0xd5e6,gr11
+ + set_gr_limmed 0x0000,0x007e,gr10 ; -2 (only lower 7 bits matter)
+ scutss gr10,gr11
+ test_gr_limmed 0xf9e2,0x6af3,gr11
+ + set_gr_immed -3,gr10
+ scutss gr10,gr11
+ test_gr_limmed 0xfcf1,0x3579,gr11
+ + set_gr_immed -4,gr10
+ scutss gr10,gr11
+ test_gr_limmed 0xfe78,0x9abc,gr11
+ + set_gr_immed -5,gr10
+ scutss gr10,gr11
+ test_gr_limmed 0xff3c,0x4d5e,gr11
+ + set_gr_immed -6,gr10
+ scutss gr10,gr11
+ test_gr_limmed 0xff9e,0x26af,gr11
+ + set_gr_immed -7,gr10
+ scutss gr10,gr11
+ test_gr_limmed 0xffcf,0x1357,gr11
+ + set_gr_immed -8,gr10
+ scutss gr10,gr11
+ test_gr_limmed 0xffe7,0x89ab,gr11
+ + set_gr_immed -9,gr10
+ scutss gr10,gr11
+ test_gr_limmed 0xfff3,0xc4d5,gr11
+ + set_gr_immed -10,gr10
+ scutss gr10,gr11
+ test_gr_limmed 0xfff9,0xe26a,gr11
+ + set_gr_immed -11,gr10
+ scutss gr10,gr11
+ test_gr_limmed 0xfffc,0xf135,gr11
+ + set_gr_immed -12,gr10
+ scutss gr10,gr11
+ test_gr_limmed 0xfffe,0x789a,gr11
+ + set_gr_immed -13,gr10
+ scutss gr10,gr11
+ test_gr_limmed 0xffff,0x3c4d,gr11
+ + set_gr_immed -14,gr10
+ scutss gr10,gr11
+ test_gr_limmed 0xffff,0x9e26,gr11
+ + set_gr_immed -15,gr10
+ scutss gr10,gr11
+ test_gr_limmed 0xffff,0xcf13,gr11
+ + set_gr_immed -16,gr10
+ scutss gr10,gr11
+ test_gr_limmed 0xffff,0xe789,gr11
+ + set_gr_immed -17,gr10
+ scutss gr10,gr11
+ test_gr_limmed 0xffff,0xf3c4,gr11
+ + set_gr_immed -18,gr10
+ scutss gr10,gr11
+ test_gr_limmed 0xffff,0xf9e2,gr11
+ + set_gr_immed -19,gr10
+ scutss gr10,gr11
+ test_gr_limmed 0xffff,0xfcf1,gr11
+ + set_gr_immed -20,gr10
+ scutss gr10,gr11
+ test_gr_limmed 0xffff,0xfe78,gr11
+ + set_gr_immed -21,gr10
+ scutss gr10,gr11
+ test_gr_limmed 0xffff,0xff3c,gr11
+ + set_gr_immed -22,gr10
+ scutss gr10,gr11
+ test_gr_limmed 0xffff,0xff9e,gr11
+ + set_gr_immed -23,gr10
+ scutss gr10,gr11
+ test_gr_limmed 0xffff,0xffcf,gr11
+ + set_gr_immed -24,gr10
+ scutss gr10,gr11
+ test_gr_limmed 0xffff,0xffe7,gr11
+ + set_gr_immed -25,gr10
+ scutss gr10,gr11
+ test_gr_limmed 0xffff,0xfff3,gr11
+ + set_gr_immed -26,gr10
+ scutss gr10,gr11
+ test_gr_limmed 0xffff,0xfff9,gr11
+ + set_gr_immed -27,gr10
+ scutss gr10,gr11
+ test_gr_limmed 0xffff,0xfffc,gr11
+ + set_gr_immed -28,gr10
+ scutss gr10,gr11
+ test_gr_limmed 0xffff,0xfffe,gr11
+ + set_gr_immed -29,gr10
+ scutss gr10,gr11
+ test_gr_limmed 0xffff,0xffff,gr11
+ + set_gr_immed -30,gr10
+ scutss gr10,gr11
+ test_gr_limmed 0xffff,0xffff,gr11
+ + set_gr_immed -31,gr10
+ scutss gr10,gr11
+ test_gr_limmed 0xffff,0xffff,gr11
+ + set_gr_immed -32,gr10
+ scutss gr10,gr11
+ test_gr_limmed 0xffff,0xffff,gr11
+ + set_gr_limmed 0,64,gr10 ; same as -32 + scutss gr10,gr11
+ test_gr_limmed 0xffff,0xffff,gr11
+ + set_spr_immed 0x6789abcd,iacc0h
+ set_spr_immed 0xefa5a5a5,iacc0l
+ + set_gr_limmed 0xffff,0xffff,gr10
+ scutss gr10,gr11
+ test_gr_limmed 0x33c4,0xd5e6,gr11
+ + set_gr_limmed 0x0000,0x007e,gr10 ; -2 (only lower 7 bits matter)
+ scutss gr10,gr11
+ test_gr_limmed 0x19e2,0x6af3,gr11
+ + set_gr_immed -3,gr10
+ scutss gr10,gr11
+ test_gr_limmed 0x0cf1,0x3579,gr11
+ + set_gr_immed -4,gr10
+ scutss gr10,gr11
+ test_gr_limmed 0x0678,0x9abc,gr11
+ + set_gr_immed -5,gr10
+ scutss gr10,gr11
+ test_gr_limmed 0x033c,0x4d5e,gr11
+ + set_gr_immed -6,gr10
+ scutss gr10,gr11
+ test_gr_limmed 0x019e,0x26af,gr11
+ + set_gr_immed -7,gr10
+ scutss gr10,gr11
+ test_gr_limmed 0x00cf,0x1357,gr11
+ + set_gr_immed -8,gr10
+ scutss gr10,gr11
+ test_gr_limmed 0x0067,0x89ab,gr11
+ + set_gr_immed -9,gr10
+ scutss gr10,gr11
+ test_gr_limmed 0x0033,0xc4d5,gr11
+ + set_gr_immed -10,gr10
+ scutss gr10,gr11
+ test_gr_limmed 0x0019,0xe26a,gr11
+ + set_gr_immed -11,gr10
+ scutss gr10,gr11
+ test_gr_limmed 0x000c,0xf135,gr11
+ + set_gr_immed -12,gr10
+ scutss gr10,gr11
+ test_gr_limmed 0x0006,0x789a,gr11
+ + set_gr_immed -13,gr10
+ scutss gr10,gr11
+ test_gr_limmed 0x0003,0x3c4d,gr11
+ + set_gr_immed -14,gr10
+ scutss gr10,gr11
+ test_gr_limmed 0x0001,0x9e26,gr11
+ + set_gr_immed -15,gr10
+ scutss gr10,gr11
+ test_gr_limmed 0x0000,0xcf13,gr11
+ + set_gr_immed -16,gr10
+ scutss gr10,gr11
+ test_gr_limmed 0x0000,0x6789,gr11
+ + set_gr_immed -17,gr10
+ scutss gr10,gr11
+ test_gr_limmed 0x0000,0x33c4,gr11
+ + set_gr_immed -18,gr10
+ scutss gr10,gr11
+ test_gr_limmed 0x0000,0x19e2,gr11
+ + set_gr_immed -19,gr10
+ scutss gr10,gr11
+ test_gr_limmed 0x0000,0x0cf1,gr11
+ + set_gr_immed -20,gr10
+ scutss gr10,gr11
+ test_gr_limmed 0x0000,0x0678,gr11
+ + set_gr_immed -21,gr10
+ scutss gr10,gr11
+ test_gr_limmed 0x0000,0x033c,gr11
+ + set_gr_immed -22,gr10
+ scutss gr10,gr11
+ test_gr_limmed 0x0000,0x019e,gr11
+ + set_gr_immed -23,gr10
+ scutss gr10,gr11
+ test_gr_limmed 0x0000,0x00cf,gr11
+ + set_gr_immed -24,gr10
+ scutss gr10,gr11
+ test_gr_limmed 0x0000,0x0067,gr11
+ + set_gr_immed -25,gr10
+ scutss gr10,gr11
+ test_gr_limmed 0x0000,0x0033,gr11
+ + set_gr_immed -26,gr10
+ scutss gr10,gr11
+ test_gr_limmed 0x0000,0x0019,gr11
+ + set_gr_immed -27,gr10
+ scutss gr10,gr11
+ test_gr_limmed 0x0000,0x000c,gr11
+ + set_gr_immed -28,gr10
+ scutss gr10,gr11
+ test_gr_limmed 0x0000,0x0006,gr11
+ + set_gr_immed -29,gr10
+ scutss gr10,gr11
+ test_gr_limmed 0x0000,0x0003,gr11
+ + set_gr_immed -30,gr10
+ scutss gr10,gr11
+ test_gr_limmed 0x0000,0x0001,gr11
+ + set_gr_immed -31,gr10
+ scutss gr10,gr11
+ test_gr_limmed 0x0000,0x0000,gr11
+ + set_gr_immed -32,gr10
+ scutss gr10,gr11
+ test_gr_limmed 0x0000,0x0000,gr11
+ + set_gr_immed 64,gr10 ; same as -32
+ scutss gr10,gr11
+ test_gr_limmed 0x0000,0x0000,gr11
+ + ; Examples from the customer (modified for iacc0)
+ set_spr_immed 0xffffffff,iacc0h
+ set_spr_immed 0xffe00000,iacc0l
+ + set_gr_limmed 0,16,gr10
+ scutss gr10,gr11
+ test_gr_limmed 0xffff,0xffe0,gr11
+ + set_gr_limmed 0,17,gr10
+ scutss gr10,gr11
+ test_gr_limmed 0xffff,0xffc0,gr11
+ + set_gr_limmed 0,18,gr10
+ scutss gr10,gr11
+ test_gr_limmed 0xffff,0xff80,gr11
+ + set_spr_immed 0,iacc0h
+ set_spr_immed 0x003fffff,iacc0l
+ + set_gr_limmed 0,40,gr10
+ scutss gr10,gr11
+ test_gr_limmed 0x3fff,0xff00,gr11
+ + set_gr_limmed 0,41,gr10
+ scutss gr10,gr11
+ test_gr_limmed 0x7fff,0xfe00,gr11
+ + set_spr_immed 0x7f,iacc0h
+ set_spr_immed 0xffe00000,iacc0l
+ + set_gr_limmed 0,40,gr10
+ scutss gr10,gr11
+ test_gr_limmed 0x7fff,0xffff,gr11 ; saturated
+ + set_gr_limmed 0,41,gr10
+ scutss gr10,gr11
+ test_gr_limmed 0x7fff,0xffff,gr11 ; saturated
+ + set_gr_limmed 0,42,gr10
+ scutss gr10,gr11
+ test_gr_limmed 0x7fff,0xffff,gr11 ; saturated
+ + set_spr_immed 0x08,iacc0h
+ set_spr_immed 0x003fffff,iacc0l
+ + set_gr_limmed 0,40,gr10
+ scutss gr10,gr11
+ test_gr_limmed 0x7fff,0xffff,gr11 ; saturated
+ + set_gr_limmed 0,41,gr10
+ scutss gr10,gr11
+ test_gr_limmed 0x7fff,0xffff,gr11 ; saturated
+ + set_spr_immed 0xffffffff,iacc0h
+ set_spr_immed 0xefe00000,iacc0l
+ + set_gr_limmed 0,40,gr10
+ scutss gr10,gr11
+ test_gr_limmed 0x8000,0x0000,gr11 ; saturated
+ + set_gr_limmed 0,41,gr10
+ scutss gr10,gr11
+ test_gr_limmed 0x8000,0x0000,gr11 ; saturated
+ + set_gr_limmed 0,42,gr10
+ scutss gr10,gr11
+ test_gr_limmed 0x8000,0x0000,gr11 ; saturated
+ + set_spr_immed 0x80000000,iacc0h
+ set_spr_immed 0x003fffff,iacc0l
+ + set_gr_limmed 0,16,gr10
+ scutss gr10,gr11
+ test_gr_limmed 0x8000,0x0000,gr11 ; saturated
+ + set_gr_limmed 0,17,gr10
+ scutss gr10,gr11
+ test_gr_limmed 0x8000,0x0000,gr11 ; saturated
+ + set_spr_immed 0xaf5a5a5a,iacc0h
+ set_spr_immed 0x5a5a5a5a,iacc0l
+ + set_gr_limmed 0xffff,0xfffc,gr10
+ scutss gr10,gr11
+ test_gr_limmed 0xfaf5,0xa5a5,gr11
+ + set_spr_immed 0x2f5a5a5a,iacc0h
+ set_spr_immed 0x5a5a5a5a,iacc0l
+ + set_gr_limmed 0xffff,0xfff9,gr10
+ scutss gr10,gr11
+ test_gr_limmed 0x005e,0xb4b4,gr11
+ + pass
Index: sim/testsuite/sim/frv/fr400/slass.cgs
===================================================================
RCS file: sim/testsuite/sim/frv/fr400/slass.cgs
diff -N sim/testsuite/sim/frv/fr400/slass.cgs
*** /dev/null 1 Jan 1970 00:00:00 -0000
--- sim/testsuite/sim/frv/fr400/slass.cgs 1 Oct 2003 19:14:45 -0000
***************
*** 0 ****
--- 1,104 ----
+ # frv testcase for slass $GRi,$GRj,$GRk
+ # mach: fr400
+ + .include "../testutils.inc"
+ + start
+ + .global sll
+ slass0:
+ set_gr_immed 0,gr7 ; Shift by 0
+ set_gr_immed 2,gr8
+ slass gr8,gr7,gr6
+ test_gr_immed 2,gr8
+ test_gr_immed 0,gr7
+ test_gr_immed 2,gr6
+ slass1:
+ set_gr_immed 1,gr7 ; Shift by 1
+ set_gr_immed 2,gr8
+ slass gr8,gr7,gr6
+ test_gr_immed 2,gr8
+ test_gr_immed 1,gr7
+ test_gr_immed 4,gr6
+ + slass2:
+ set_gr_immed 31,gr7 ; Shift 1 by 31
+ set_gr_immed 1,gr8
+ slass gr8,gr7,gr6
+ test_gr_immed 1,gr8
+ test_gr_immed 31,gr7
+ test_gr_limmed 0x7fff,0xffff,gr6
+ + slass3:
+ set_gr_immed 31,gr7 ; Shift -1 by 31
+ set_gr_immed -1,gr8
+ slass gr8,gr7,gr6
+ test_gr_immed -1,gr8
+ test_gr_immed 31,gr7
+ test_gr_limmed 0x8000,0x0000,gr6
+ + slass4:
+ set_gr_immed 14,gr7 ; Shift 0xffff0000 by 14
+ set_gr_limmed 0xffff,0x0000,gr8
+ slass gr8,gr7,gr6
+ test_gr_limmed 0xffff,0x0000,gr8
+ test_gr_immed 14,gr7
+ test_gr_limmed 0xc000,0x0000,gr6
+ + slass5:
+ set_gr_immed 15,gr7 ; Shift 0xffff0000 by 15
+ set_gr_limmed 0xffff,0x0000,gr8
+ slass gr8,gr7,gr6
+ test_gr_limmed 0xffff,0x0000,gr8
+ test_gr_immed 15,gr7
+ test_gr_limmed 0x8000,0x0000,gr6
+ + slass6:
+ set_gr_immed 20,gr7 ; Shift 0xffff0000 by 20
+ set_gr_limmed 0xffff,0x0000,gr8
+ slass gr8,gr7,gr6
+ test_gr_limmed 0xffff,0x0000,gr8
+ test_gr_immed 20,gr7
+ test_gr_limmed 0x8000,0x0000,gr6
+ + slass7:
+ set_gr_immed 14,gr7 ; Shift 0x0000ffff by 14
+ set_gr_limmed 0x0000,0xffff,gr8
+ slass gr8,gr7,gr6
+ test_gr_limmed 0x0000,0xffff,gr8
+ test_gr_immed 14,gr7
+ test_gr_limmed 0x3fff,0xc000,gr6
+ + slass8:
+ set_gr_immed 15,gr7 ; Shift 0x0000ffff by 15
+ set_gr_limmed 0x0000,0xffff,gr8
+ slass gr8,gr7,gr6
+ test_gr_limmed 0x0000,0xffff,gr8
+ test_gr_immed 15,gr7
+ test_gr_limmed 0x7fff,0x8000,gr6
+ + slass9:
+ set_gr_immed 20,gr7 ; Shift 0x0000ffff by 20
+ set_gr_limmed 0x0000,0xffff,gr8
+ slass gr8,gr7,gr6
+ test_gr_limmed 0x0000,0xffff,gr8
+ test_gr_immed 20,gr7
+ test_gr_limmed 0x7fff,0xffff,gr6
+ + slass10:
+ set_gr_immed 30,gr7 ; Shift 1 by 30
+ set_gr_immed 1,gr8
+ slass gr8,gr7,gr6
+ test_gr_immed 1,gr8
+ test_gr_immed 30,gr7
+ test_gr_limmed 0x4000,0x0000,gr6
+ + slass11:
+ set_gr_immed 30,gr7 ; Shift -1 by 30
+ set_gr_immed -1,gr8
+ slass gr8,gr7,gr6
+ test_gr_immed -1,gr8
+ test_gr_immed 30,gr7
+ test_gr_limmed 0xc000,0000,gr6
+ + pass
Index: sim/testsuite/sim/frv/fr400/smass.cgs
===================================================================
RCS file: sim/testsuite/sim/frv/fr400/smass.cgs
diff -N sim/testsuite/sim/frv/fr400/smass.cgs
*** /dev/null 1 Jan 1970 00:00:00 -0000
--- sim/testsuite/sim/frv/fr400/smass.cgs 1 Oct 2003 19:14:45 -0000
***************
*** 0 ****
--- 1,359 ----
+ # frv testcase for smass $GRi,$GRj
+ # mach: fr400
+ + .include "../testutils.inc"
+ + start
+ + .global smass
+ smass1:
+ ; Positive operands
+ set_gr_immed 3,gr7 ; multiply small numbers
+ set_gr_immed 2,gr8
+ set_spr_immed 0,iacc0h
+ set_spr_immed 1,iacc0l
+ smass gr7,gr8
+ test_gr_immed 3,gr7
+ test_gr_immed 2,gr8
+ test_spr_immed 7,iacc0l ; result 3*2+1
+ test_spr_immed 0,iacc0h
+ smass2:
+ set_gr_immed 1,gr7 ; multiply by 1
+ set_gr_immed 2,gr8
+ set_spr_immed 0,iacc0h
+ set_spr_immed 1,iacc0l
+ smass gr7,gr8
+ test_gr_immed 1,gr7
+ test_gr_immed 2,gr8
+ test_spr_immed 3,iacc0l ; result 1*2+1
+ test_spr_immed 0,iacc0h
+ smass3:
+ set_gr_immed 2,gr7 ; multiply by 1
+ set_gr_immed 1,gr8
+ set_spr_immed 0,iacc0h
+ set_spr_immed 1,iacc0l
+ smass gr7,gr8
+ test_gr_immed 1,gr8
+ test_gr_immed 2,gr7
+ test_spr_immed 3,iacc0l ; result 2*1+1
+ test_spr_immed 0,iacc0h
+ smass4:
+ set_gr_immed 0,gr7 ; multiply by 0
+ set_gr_immed 2,gr8
+ set_spr_immed 0,iacc0h
+ set_spr_immed 1,iacc0l
+ smass gr7,gr8
+ test_gr_immed 2,gr8
+ test_gr_immed 0,gr7
+ test_spr_immed 1,iacc0l ; result 0*2+1
+ test_spr_immed 0,iacc0h
+ smass5:
+ set_gr_immed 2,gr7 ; multiply by 0
+ set_gr_immed 0,gr8
+ set_spr_immed 0,iacc0h
+ set_spr_immed 1,iacc0l
+ smass gr7,gr8
+ test_gr_immed 0,gr8
+ test_gr_immed 2,gr7
+ test_spr_immed 1,iacc0l ; result 2*0+1
+ test_spr_immed 0,iacc0h
+ smass6:
+ set_gr_limmed 0x3fff,0xffff,gr7 ; 31 bit result
+ set_gr_immed 2,gr8
+ set_spr_immed 0,iacc0h
+ set_spr_immed 1,iacc0l
+ smass gr7,gr8
+ test_gr_immed 2,gr8
+ test_gr_limmed 0x3fff,0xffff,gr7
+ test_spr_limmed 0x7fff,0xffff,iacc0l ; 3fffffff*2+1
+ test_spr_immed 0,iacc0h
+ smass7:
+ set_gr_limmed 0x4000,0x0000,gr7 ; 32 bit result
+ set_gr_immed 2,gr8
+ set_spr_immed 0,iacc0h
+ set_spr_immed 1,iacc0l
+ smass gr7,gr8
+ test_gr_immed 2,gr8
+ test_gr_limmed 0x4000,0x0000,gr7
+ test_spr_limmed 0x8000,0x0001,iacc0l ; 40000000*2+1
+ test_spr_immed 0,iacc0h
+ smass8:
+ set_gr_limmed 0x4000,0x0000,gr7 ; 33 bit result
+ set_gr_immed 4,gr8
+ set_spr_immed 0,iacc0h
+ set_spr_immed 1,iacc0l
+ smass gr7,gr8
+ test_gr_immed 4,gr8
+ test_gr_limmed 0x4000,0x0000,gr7
+ test_spr_immed 1,iacc0l ; 40000000*4+1
+ test_spr_immed 1,iacc0h
+ smass9:
+ set_gr_limmed 0x7fff,0xffff,gr7 ; max positive result
+ set_gr_limmed 0x7fff,0xffff,gr8
+ set_spr_immed 0,iacc0h
+ set_spr_immed 1,iacc0l
+ smass gr7,gr8
+ test_gr_limmed 0x7fff,0xffff,gr8
+ test_gr_limmed 0x7fff,0xffff,gr7
+ test_spr_immed 0x00000002,iacc0l ; 7fffffff*7fffffff+1
+ test_spr_limmed 0x3fff,0xffff,iacc0h
+ smass10:
+ ; Mixed operands
+ set_gr_immed -3,gr7 ; multiply small numbers
+ set_gr_immed 2,gr8
+ set_spr_immed 0,iacc0h
+ set_spr_immed 1,iacc0l
+ smass gr7,gr8
+ test_gr_immed 2,gr8
+ test_gr_immed -3,gr7
+ test_spr_immed -5,iacc0l ; -3*2+1
+ test_spr_immed -1,iacc0h
+ smass11:
+ set_gr_immed 3,gr7 ; multiply small numbers
+ set_gr_immed -2,gr8
+ set_spr_immed 0,iacc0h
+ set_spr_immed 1,iacc0l
+ smass gr7,gr8
+ test_gr_immed -2,gr8
+ test_gr_immed 3,gr7
+ test_spr_immed -5,iacc0l ; 3*-2+1
+ test_spr_immed -1,iacc0h
+ smass12:
+ set_gr_immed 1,gr7 ; multiply by 1
+ set_gr_immed -2,gr8
+ set_spr_immed 0,iacc0h
+ set_spr_immed 1,iacc0l
+ smass gr7,gr8
+ test_gr_immed -2,gr8
+ test_gr_immed 1,gr7
+ test_spr_immed -1,iacc0l ; 1*-2+1
+ test_spr_immed -1,iacc0h
+ smass13:
+ set_gr_immed -2,gr7 ; multiply by 1
+ set_gr_immed 1,gr8
+ set_spr_immed 0,iacc0h
+ set_spr_immed 1,iacc0l
+ smass gr7,gr8
+ test_gr_immed 1,gr8
+ test_gr_immed -2,gr7
+ test_spr_immed -1,iacc0l ; -2*1+1
+ test_spr_immed -1,iacc0h
+ smass14:
+ set_gr_immed 0,gr7 ; multiply by 0
+ set_gr_immed -2,gr8
+ set_spr_immed 0,iacc0h
+ set_spr_immed 1,iacc0l
+ smass gr7,gr8
+ test_gr_immed -2,gr8
+ test_gr_immed 0,gr7
+ test_spr_immed 1,iacc0l ; 0*-2+1
+ test_spr_immed 0,iacc0h
+ smass15:
+ set_gr_immed -2,gr7 ; multiply by 0
+ set_gr_immed 0,gr8
+ set_spr_immed 0,iacc0h
+ set_spr_immed 1,iacc0l
+ smass gr7,gr8
+ test_gr_immed 0,gr8
+ test_gr_immed -2,gr7
+ test_spr_immed 1,iacc0l ; -2*0+1
+ test_spr_immed 0,iacc0h
+ smass16:
+ set_gr_limmed 0x2000,0x0001,gr7 ; 31 bit result
+ set_gr_immed -2,gr8
+ set_spr_immed 0,iacc0h
+ set_spr_immed 1,iacc0l
+ smass gr7,gr8
+ test_gr_immed -2,gr8
+ test_gr_limmed 0x2000,0x0001,gr7
+ test_spr_limmed 0xbfff,0xffff,iacc0l ; 20000001*-2+1
+ test_spr_limmed 0xffff,0xffff,iacc0h
+ smass17:
+ set_gr_limmed 0x4000,0x0000,gr7 ; 32 bit result
+ set_gr_immed -2,gr8
+ set_spr_immed 0,iacc0h
+ set_spr_immed 1,iacc0l
+ smass gr7,gr8
+ test_gr_immed -2,gr8
+ test_gr_limmed 0x4000,0x0000,gr7
+ test_spr_limmed 0x8000,0x0001,iacc0l ; 40000000*-2+1
+ test_spr_limmed 0xffff,0xffff,iacc0h
+ smass18:
+ set_gr_limmed 0x4000,0x0001,gr7 ; 32 bit result
+ set_gr_immed -2,gr8
+ set_spr_immed 0,iacc0h
+ set_spr_immed 1,iacc0l
+ smass gr7,gr8
+ test_gr_immed -2,gr8
+ test_gr_limmed 0x4000,0x0001,gr7
+ test_spr_limmed 0x7fff,0xffff,iacc0l ; 40000001*-2+1
+ test_spr_limmed 0xffff,0xffff,iacc0h
+ smass19:
+ set_gr_limmed 0x4000,0x0000,gr7 ; 33 bit result
+ set_gr_immed -4,gr8
+ set_spr_immed 0,iacc0h
+ set_spr_immed 1,iacc0l
+ smass gr7,gr8
+ test_gr_immed -4,gr8
+ test_gr_limmed 0x4000,0x0000,gr7
+ test_spr_limmed 0x0000,0x0001,iacc0l ; 40000000*-4+1
+ test_spr_limmed 0xffff,0xffff,iacc0h
+ smass20:
+ set_gr_limmed 0x7fff,0xffff,gr7 ; max negative result
+ set_gr_limmed 0x8000,0x0000,gr8
+ set_spr_immed 0,iacc0h
+ set_spr_immed 1,iacc0l
+ smass gr7,gr8
+ test_gr_limmed 0x8000,0x0000,gr8
+ test_gr_limmed 0x7fff,0xffff,gr7
+ test_spr_limmed 0x8000,0x0001,iacc0l ; 7fffffff*80000000+1
+ test_spr_limmed 0xc000,0x0000,iacc0h
+ smass21:
+ ; Negative operands
+ set_gr_immed -3,gr7 ; multiply small numbers
+ set_gr_immed -2,gr8
+ set_spr_immed 0,iacc0h
+ set_spr_immed 1,iacc0l
+ smass gr7,gr8
+ test_gr_immed -2,gr8
+ test_gr_immed -3,gr7
+ test_spr_immed 7,iacc0l ; -3*-2+1
+ test_spr_immed 0,iacc0h
+ smass22:
+ set_gr_immed -1,gr7 ; multiply by 1
+ set_gr_immed -2,gr8
+ set_spr_immed 0,iacc0h
+ set_spr_immed 1,iacc0l
+ smass gr7,gr8
+ test_gr_immed -2,gr8
+ test_gr_immed -1,gr7
+ test_spr_immed 3,iacc0l ; -1*-2+1
+ test_spr_immed 0,iacc0h
+ smass23:
+ set_gr_immed -2,gr7 ; multiply by 1
+ set_gr_immed -1,gr8
+ set_spr_immed 0,iacc0h
+ set_spr_immed 1,iacc0l
+ smass gr7,gr8
+ test_gr_immed -1,gr8
+ test_gr_immed -2,gr7
+ test_spr_immed 3,iacc0l ; -2*-1+1
+ test_spr_immed 0,iacc0h
+ smass24:
+ set_gr_limmed 0xc000,0x0001,gr7 ; 31 bit result
+ set_gr_immed -2,gr8
+ set_spr_immed 0,iacc0h
+ set_spr_immed 1,iacc0l
+ smass gr7,gr8
+ test_gr_immed -2,gr8
+ test_gr_limmed 0xc000,0x0001,gr7
+ test_spr_limmed 0x7fff,0xffff,iacc0l ; c0000001*-2+1
+ test_spr_immed 0,iacc0h
+ smass25:
+ set_gr_limmed 0xc000,0x0000,gr7 ; 32 bit result
+ set_gr_immed -2,gr8
+ set_spr_immed 0,iacc0h
+ set_spr_immed 1,iacc0l
+ smass gr7,gr8
+ test_gr_immed -2,gr8
+ test_gr_limmed 0xc000,0x0000,gr7
+ test_spr_limmed 0x8000,0x0001,iacc0l ; c0000000*-2+1
+ test_spr_immed 0,iacc0h
+ smass26:
+ set_gr_limmed 0xc000,0x0000,gr7 ; 33 bit result
+ set_gr_immed -4,gr8
+ set_spr_immed 0,iacc0h
+ set_spr_immed 1,iacc0l
+ smass gr7,gr8
+ test_gr_immed -4,gr8
+ test_gr_limmed 0xc000,0x0000,gr7
+ test_spr_immed 0x00000001,iacc0l ; c0000000*-4+1
+ test_spr_immed 1,iacc0h
+ smass27:
+ set_gr_limmed 0x8000,0x0001,gr7 ; almost max positive result
+ set_gr_limmed 0x8000,0x0001,gr8
+ set_spr_immed 0,iacc0h
+ set_spr_immed 1,iacc0l
+ smass gr7,gr8
+ test_gr_limmed 0x8000,0x0001,gr8
+ test_gr_limmed 0x8000,0x0001,gr7
+ test_spr_immed 0x00000002,iacc0l ; 80000001*80000001+1
+ test_spr_limmed 0x3fff,0xffff,iacc0h
+ smass28:
+ set_gr_limmed 0x8000,0x0000,gr7 ; max positive result
+ set_gr_limmed 0x8000,0x0000,gr8
+ set_spr_immed 0,iacc0h
+ set_spr_immed 1,iacc0l
+ smass gr7,gr8
+ test_gr_limmed 0x8000,0x0000,gr8
+ test_gr_limmed 0x8000,0x0000,gr7
+ test_spr_immed 0x00000001,iacc0l ; 80000000*80000000+1
+ test_spr_limmed 0x4000,0x0000,iacc0h
+ + smass29:
+ set_gr_limmed 0x7fff,0xffff,gr7 ; not quite overflow (pos)
+ set_gr_limmed 0x7fff,0xffff,gr8
+ set_spr_limmed 0xffff,0xfffe,iacc0l
+ set_spr_limmed 0x4000,0x0000,iacc0h
+ smass gr7,gr8
+ test_gr_limmed 0x7fff,0xffff,gr8
+ test_gr_limmed 0x7fff,0xffff,gr7
+ test_spr_limmed 0xffff,0xffff,iacc0l ; 7fffffff*7fffffff+
+ test_spr_limmed 0x7fff,0xffff,iacc0h ; 40000000fffffffe
+ + smass30:
+ set_gr_limmed 0x7fff,0xffff,gr7 ; just barely overflow (pos)
+ set_gr_limmed 0x7fff,0xffff,gr8
+ set_spr_limmed 0xffff,0xffff,iacc0l
+ set_spr_limmed 0x4000,0x0000,iacc0h
+ smass gr7,gr8
+ test_gr_limmed 0x7fff,0xffff,gr8
+ test_gr_limmed 0x7fff,0xffff,gr7
+ test_spr_limmed 0xffff,0xffff,iacc0l ; 7fffffff*7fffffff+
+ test_spr_limmed 0x7fff,0xffff,iacc0h ; 40000000ffffffff
+ + smass31:
+ set_gr_limmed 0x7fff,0xffff,gr7 ; maximum overflow (pos)
+ set_gr_limmed 0x7fff,0xffff,gr8
+ set_spr_limmed 0xffff,0xffff,iacc0l
+ set_spr_limmed 0x7fff,0xffff,iacc0h
+ smass gr7,gr8
+ test_gr_limmed 0x7fff,0xffff,gr8
+ test_gr_limmed 0x7fff,0xffff,gr7
+ test_spr_limmed 0xffff,0xffff,iacc0l ; 7fffffff*7fffffff+
+ test_spr_limmed 0x7fff,0xffff,iacc0h ; 7fffffffffffffff
+ + smass32:
+ set_gr_limmed 0x7fff,0xffff,gr7 ; not quite overflow (neg)
+ set_gr_limmed 0x8000,0x0000,gr8
+ set_spr_limmed 0x8000,0x0000,iacc0l
+ set_spr_limmed 0xbfff,0xffff,iacc0h
+ smass gr7,gr8
+ test_gr_limmed 0x8000,0x0000,gr8
+ test_gr_limmed 0x7fff,0xffff,gr7
+ test_spr_limmed 0x0000,0x0000,iacc0l ; 7fffffff*7fffffff+
+ test_spr_limmed 0x8000,0x0000,iacc0h ; bfffffff80000000
+ + smass33:
+ set_gr_limmed 0x7fff,0xffff,gr7 ; just barely overflow (neg)
+ set_gr_limmed 0x8000,0x0000,gr8
+ set_spr_limmed 0x7fff,0xffff,iacc0l
+ set_spr_limmed 0xbfff,0xffff,iacc0h
+ smass gr7,gr8
+ test_gr_limmed 0x8000,0x0000,gr8
+ test_gr_limmed 0x7fff,0xffff,gr7
+ test_spr_limmed 0x0000,0x0000,iacc0l ; 7fffffff*7fffffff+
+ test_spr_limmed 0x8000,0x0000,iacc0h ; bfffffff7fffffff
+ + smass34:
+ set_gr_limmed 0x7fff,0xffff,gr7 ; maximum overflow (neg)
+ set_gr_limmed 0x8000,0x0000,gr8
+ set_spr_limmed 0x0000,0x0000,iacc0l
+ set_spr_limmed 0x8000,0x0000,iacc0h
+ smass gr7,gr8
+ test_gr_limmed 0x8000,0x0000,gr8
+ test_gr_limmed 0x7fff,0xffff,gr7
+ test_spr_limmed 0x0000,0x0000,iacc0l ; 7fffffff*7fffffff+
+ test_spr_limmed 0x8000,0x0000,iacc0h ; 8000000000000000
+ + pass
Index: sim/testsuite/sim/frv/fr400/smsss.cgs
===================================================================
RCS file: sim/testsuite/sim/frv/fr400/smsss.cgs
diff -N sim/testsuite/sim/frv/fr400/smsss.cgs
*** /dev/null 1 Jan 1970 00:00:00 -0000
--- sim/testsuite/sim/frv/fr400/smsss.cgs 1 Oct 2003 19:14:45 -0000
***************
*** 0 ****
--- 1,354 ----
+ # frv testcase for smsss $GRi,$GRj
+ # mach: fr400
+ + .include "../testutils.inc"
+ + start
+ + .global smsss
+ smsss1:
+ ; Positive operands
+ set_gr_immed 3,gr7 ; multiply small numbers
+ set_gr_immed 2,gr8
+ set_spr_immed 0,iacc0h
+ set_spr_immed 7,iacc0l
+ smsss gr7,gr8
+ test_gr_immed 3,gr7
+ test_gr_immed 2,gr8
+ test_spr_immed 1,iacc0l ; result 7-3*2
+ test_spr_immed 0,iacc0h
+ smsss2:
+ set_gr_immed 1,gr7 ; multiply by 1
+ set_gr_immed 2,gr8
+ set_spr_immed 0,iacc0h
+ set_spr_immed 3,iacc0l
+ smsss gr7,gr8
+ test_gr_immed 1,gr7
+ test_gr_immed 2,gr8
+ test_spr_immed 1,iacc0l ; result 3-1*2
+ test_spr_immed 0,iacc0h
+ smsss3:
+ set_gr_immed 2,gr7 ; multiply by 1
+ set_gr_immed 1,gr8
+ set_spr_immed 0,iacc0h
+ set_spr_immed 3,iacc0l
+ smsss gr7,gr8
+ test_gr_immed 1,gr8
+ test_gr_immed 2,gr7
+ test_spr_immed 1,iacc0l ; result 3-2*1
+ test_spr_immed 0,iacc0h
+ smsss4:
+ set_gr_immed 0,gr7 ; multiply by 0
+ set_gr_immed 2,gr8
+ set_spr_immed 0,iacc0h
+ set_spr_immed 1,iacc0l
+ smsss gr7,gr8
+ test_gr_immed 2,gr8
+ test_gr_immed 0,gr7
+ test_spr_immed 1,iacc0l ; result 1-0*2
+ test_spr_immed 0,iacc0h
+ smsss5:
+ set_gr_immed 2,gr7 ; multiply by 0
+ set_gr_immed 0,gr8
+ set_spr_immed 0,iacc0h
+ set_spr_immed 1,iacc0l
+ smsss gr7,gr8
+ test_gr_immed 0,gr8
+ test_gr_immed 2,gr7
+ test_spr_immed 1,iacc0l ; result 1-2*0
+ test_spr_immed 0,iacc0h
+ smsss6:
+ set_gr_limmed 0x3fff,0xffff,gr7 ; 31 bit result
+ set_gr_immed 2,gr8
+ set_spr_immed -1,iacc0h
+ set_spr_immed -1,iacc0l
+ smsss gr7,gr8
+ test_gr_immed 2,gr8
+ test_gr_limmed 0x3fff,0xffff,gr7
+ test_spr_limmed 0x8000,0x0001,iacc0l ; -1-3fffffff*2
+ test_spr_immed -1,iacc0h
+ smsss7:
+ set_gr_limmed 0x4000,0x0000,gr7 ; 32 bit result
+ set_gr_immed 2,gr8
+ set_spr_immed -1,iacc0h
+ set_spr_limmed 0x8000,0x0001,iacc0l
+ smsss gr7,gr8
+ test_gr_immed 2,gr8
+ test_gr_limmed 0x4000,0x0000,gr7
+ test_spr_immed 1,iacc0l ; ffffffff80000001-40000000*2
+ test_spr_immed -1,iacc0h
+ smsss8:
+ set_gr_limmed 0x4000,0x0000,gr7 ; 33 bit result
+ set_gr_immed 4,gr8
+ set_spr_immed -1,iacc0h
+ set_spr_immed 1,iacc0l
+ smsss gr7,gr8
+ test_gr_immed 4,gr8
+ test_gr_limmed 0x4000,0x0000,gr7
+ test_spr_immed 1,iacc0l ; ffffffff00000001-40000000*4
+ test_spr_immed -2,iacc0h
+ smsss9:
+ set_gr_limmed 0x7fff,0xffff,gr7 ; max positive result
+ set_gr_limmed 0x7fff,0xffff,gr8
+ set_spr_limmed 0x7fff,0xffff,iacc0h
+ set_spr_immed -1,iacc0l
+ smsss gr7,gr8
+ test_gr_limmed 0x7fff,0xffff,gr8
+ test_gr_limmed 0x7fff,0xffff,gr7
+ test_spr_limmed 0xffff,0xfffe,iacc0l ; 7fffffffffffffff-7fffffff*7fffffff
+ test_spr_limmed 0x4000,0x0000,iacc0h
+ smsss10:
+ ; Mixed operands
+ set_gr_immed -3,gr7 ; multiply small numbers
+ set_gr_immed 2,gr8
+ set_spr_immed -1,iacc0h
+ set_spr_immed -5,iacc0l
+ smsss gr7,gr8
+ test_gr_immed 2,gr8
+ test_gr_immed -3,gr7
+ test_spr_immed 1,iacc0l ; -5-(-3*2)
+ test_spr_immed 0,iacc0h
+ smsss11:
+ set_gr_immed 3,gr7 ; multiply small numbers
+ set_gr_immed -2,gr8
+ set_spr_immed -1,iacc0h
+ set_spr_immed -5,iacc0l
+ smsss gr7,gr8
+ test_gr_immed -2,gr8
+ test_gr_immed 3,gr7
+ test_spr_immed 1,iacc0l ; -5-(3*-2)
+ test_spr_immed 0,iacc0h
+ smsss12:
+ set_gr_immed 1,gr7 ; multiply by 1
+ set_gr_immed -2,gr8
+ set_spr_immed -1,iacc0h
+ set_spr_immed -1,iacc0l
+ smsss gr7,gr8
+ test_gr_immed -2,gr8
+ test_gr_immed 1,gr7
+ test_spr_immed 1,iacc0l ; -1-(1*-2)
+ test_spr_immed 0,iacc0h
+ smsss13:
+ set_gr_immed -2,gr7 ; multiply by 1
+ set_gr_immed 1,gr8
+ set_spr_immed -1,iacc0h
+ set_spr_immed -1,iacc0l
+ smsss gr7,gr8
+ test_gr_immed 1,gr8
+ test_gr_immed -2,gr7
+ test_spr_immed 1,iacc0l ; -1-(-2*1)
+ test_spr_immed 0,iacc0h
+ smsss14:
+ set_gr_immed 0,gr7 ; multiply by 0
+ set_gr_immed -2,gr8
+ set_spr_immed 0,iacc0h
+ set_spr_immed 1,iacc0l
+ smsss gr7,gr8
+ test_gr_immed -2,gr8
+ test_gr_immed 0,gr7
+ test_spr_immed 1,iacc0l ; 1-(0*-2)
+ test_spr_immed 0,iacc0h
+ smsss15:
+ set_gr_immed -2,gr7 ; multiply by 0
+ set_gr_immed 0,gr8
+ set_spr_immed 0,iacc0h
+ set_spr_immed 1,iacc0l
+ smsss gr7,gr8
+ test_gr_immed 0,gr8
+ test_gr_immed -2,gr7
+ test_spr_immed 1,iacc0l ; 1-(-2*0)
+ test_spr_immed 0,iacc0h
+ smsss16:
+ set_gr_limmed 0x2000,0x0000,gr7 ; 31 bit result
+ set_gr_immed -2,gr8
+ set_spr_immed 0,iacc0h
+ set_spr_limmed 0x3fff,0xffff,iacc0l
+ smsss gr7,gr8
+ test_gr_immed -2,gr8
+ test_gr_limmed 0x2000,0x0000,gr7
+ test_spr_limmed 0x7fff,0xffff,iacc0l
+ test_spr_immed 0,iacc0h ; 3fffffff-20000001*-2
+ smsss17:
+ set_gr_limmed 0x4000,0x0000,gr7 ; 32 bit result
+ set_gr_immed -2,gr8
+ set_spr_immed 0,iacc0h
+ set_spr_immed 1,iacc0l
+ smsss gr7,gr8
+ test_gr_immed -2,gr8
+ test_gr_limmed 0x4000,0x0000,gr7
+ test_spr_limmed 0x8000,0x0001,iacc0l ; 1-40000000*-2
+ test_spr_immed 0,iacc0h
+ smsss18:
+ set_gr_limmed 0x4000,0x0000,gr7 ; 32 bit result
+ set_gr_immed -2,gr8
+ set_spr_immed -1,iacc0h
+ set_spr_immed -1,iacc0l
+ smsss gr7,gr8
+ test_gr_immed -2,gr8
+ test_gr_limmed 0x4000,0x0000,gr7
+ test_spr_limmed 0x7fff,0xffff,iacc0l
+ test_spr_immed 0,iacc0h ; -1-40000000*-2
+ smsss19:
+ set_gr_limmed 0x4000,0x0000,gr7 ; 33 bit result
+ set_gr_immed -4,gr8
+ set_spr_immed 0,iacc0h
+ set_spr_immed 1,iacc0l
+ smsss gr7,gr8
+ test_gr_immed -4,gr8
+ test_gr_limmed 0x4000,0x0000,gr7
+ test_spr_immed 1,iacc0l ; 200000001-(40000000*-4)
+ test_spr_immed 1,iacc0h
+ smsss20:
+ set_gr_limmed 0x7fff,0xffff,gr7 ; max negative result
+ set_gr_limmed 0x7fff,0xffff,gr8
+ set_spr_limmed 0xbfff,0xffff,iacc0h
+ set_spr_limmed 0x0000,0x0001,iacc0l
+ smsss gr7,gr8
+ test_gr_limmed 0x7fff,0xffff,gr8
+ test_gr_limmed 0x7fff,0xffff,gr7
+ test_spr_immed 0,iacc0l ; bfffffff00000001-(7fffffff*7fffffff)
+ test_spr_limmed 0x8000,0x0000,iacc0h
+ smsss21:
+ ; Negative operands
+ set_gr_immed -3,gr7 ; multiply small numbers
+ set_gr_immed -2,gr8
+ set_spr_immed 0,iacc0h
+ set_spr_immed 7,iacc0l
+ smsss gr7,gr8
+ test_gr_immed -2,gr8
+ test_gr_immed -3,gr7
+ test_spr_immed 1,iacc0l ; 7-(-3*-2)
+ test_spr_immed 0,iacc0h
+ smsss22:
+ set_gr_immed -1,gr7 ; multiply by 1
+ set_gr_immed -2,gr8
+ set_spr_immed 0,iacc0h
+ set_spr_immed 3,iacc0l
+ smsss gr7,gr8
+ test_gr_immed -2,gr8
+ test_gr_immed -1,gr7
+ test_spr_immed 1,iacc0l ; 3-(-1*-2)
+ test_spr_immed 0,iacc0h
+ smsss23:
+ set_gr_immed -2,gr7 ; multiply by 1
+ set_gr_immed -1,gr8
+ set_spr_immed 0,iacc0h
+ set_spr_immed 3,iacc0l
+ smsss gr7,gr8
+ test_gr_immed -1,gr8
+ test_gr_immed -2,gr7
+ test_spr_immed 1,iacc0l ; 3-(-2*-1)
+ test_spr_immed 0,iacc0h
+ smsss24:
+ set_gr_immed -32768,gr7 ; 31 bit result
+ set_gr_immed -32768,gr8
+ set_spr_immed 0,iacc0h
+ set_spr_limmed 0xbfff,0xffff,iacc0l
+ smsss gr7,gr8
+ test_gr_immed -32768,gr8
+ test_gr_immed -32768,gr7
+ test_spr_limmed 0x7fff,0xffff,iacc0l ; 7ffffffb-(-2*-2)
+ test_spr_immed 0,iacc0h
+ smsss25:
+ set_gr_immed 0xffff,gr7 ; 32 bit result
+ set_gr_immed 0xffff,gr8
+ set_spr_immed 1,iacc0h
+ set_spr_limmed 0xfffe,0x0000,iacc0l
+ smsss gr7,gr8
+ test_gr_immed 0xffff,gr8
+ test_gr_immed 0xffff,gr7
+ test_spr_limmed 0xffff,0xffff,iacc0l ; 1fffe0000-ffff*ffff
+ test_spr_immed 0,iacc0h
+ smsss26:
+ set_gr_limmed 0x0001,0x0000,gr7 ; 33 bit result
+ set_gr_limmed 0x0001,0x0000,gr8
+ set_spr_immed 2,iacc0h
+ set_spr_immed 1,iacc0l
+ smsss gr7,gr8
+ test_gr_limmed 0x0001,0x0000,gr8
+ test_gr_limmed 0x0001,0x0000,gr7
+ test_spr_immed 1,iacc0l ; 0x200000001-0x10000*0x10000
+ test_spr_immed 1,iacc0h
+ smsss27:
+ set_gr_immed -2,gr7 ; almost max positive result
+ set_gr_immed -2,gr8
+ set_spr_limmed 0x7fff,0xffff,iacc0h
+ set_spr_limmed 0xffff,0xffff,iacc0l
+ smsss gr7,gr8
+ test_gr_immed -2,gr8
+ test_gr_immed -2,gr7
+ test_spr_limmed 0xffff,0xfffb,iacc0l ; maxpos - (-2*-2)
+ test_spr_limmed 0x7fff,0xffff,iacc0h
+ smsss28:
+ set_gr_immed 0,gr7 ; max positive result
+ set_gr_immed 0,gr8
+ set_spr_limmed 0x7fff,0xffff,iacc0h
+ set_spr_limmed 0xffff,0xffff,iacc0l
+ smsss gr7,gr8
+ test_gr_immed 0,gr8
+ test_gr_immed 0,gr7
+ test_spr_limmed 0xffff,0xffff,iacc0l ; maxpos-(0*0)
+ test_spr_limmed 0x7fff,0xffff,iacc0h
+ smsss29:
+ set_gr_limmed 0x7fff,0xffff,gr7 ; not quite overflow (pos)
+ set_gr_limmed 0x8000,0x0000,gr8
+ set_spr_limmed 0x4000,0x0000,iacc0h
+ set_spr_limmed 0x7fff,0xffff,iacc0l
+ smsss gr7,gr8
+ test_gr_limmed 0x8000,0x0000,gr8
+ test_gr_limmed 0x7fff,0xffff,gr7
+ test_spr_limmed 0xffff,0xffff,iacc0l ; 400000007fffffff - + test_spr_limmed 0x7fff,0xffff,iacc0h ; 0x80000000*0x7fffffff
+ smsss30:
+ set_gr_limmed 0x7fff,0xffff,gr7 ; just barely overflow (pos)
+ set_gr_limmed 0x8000,0x0000,gr8
+ set_spr_limmed 0x4000,0x0000,iacc0h
+ set_spr_limmed 0x8000,0x0000,iacc0l
+ smsss gr7,gr8
+ test_gr_limmed 0x8000,0x0000,gr8
+ test_gr_limmed 0x7fff,0xffff,gr7
+ test_spr_limmed 0xffff,0xffff,iacc0l ; 4000000080000000 -
+ test_spr_limmed 0x7fff,0xffff,iacc0h ; 0x80000000*0x7fffffff
+ + smsss31:
+ set_gr_limmed 0x7fff,0xffff,gr7 ; maximum overflow (pos)
+ set_gr_limmed 0x8000,0x0000,gr8
+ set_spr_limmed 0xffff,0xffff,iacc0l
+ set_spr_limmed 0x7fff,0xffff,iacc0h
+ smsss gr7,gr8
+ test_gr_limmed 0x8000,0x0000,gr8
+ test_gr_limmed 0x7fff,0xffff,gr7
+ test_spr_limmed 0xffff,0xffff,iacc0l ; 7fffffffffffffff -
+ test_spr_limmed 0x7fff,0xffff,iacc0h ; 80000000*80000000
+ smsss32:
+ set_gr_limmed 0x7fff,0xffff,gr7 ; not quite overflow (neg)
+ set_gr_limmed 0x7fff,0xffff,gr8
+ set_spr_immed 1,iacc0l
+ set_spr_limmed 0xbfff,0xffff,iacc0h
+ smsss gr7,gr8
+ test_gr_limmed 0x7fff,0xffff,gr8
+ test_gr_limmed 0x7fff,0xffff,gr7
+ test_spr_limmed 0x0000,0x0000,iacc0l ; bfffffff00000001 -
+ test_spr_limmed 0x8000,0x0000,iacc0h ; 0x7fffffff*0x7fffffff
+ smsss33:
+ set_gr_limmed 0x7fff,0xffff,gr7 ; just barely overflow (neg)
+ set_gr_limmed 0x7fff,0xffff,gr8
+ set_spr_immed 0,iacc0l
+ set_spr_limmed 0xbfff,0xffff,iacc0h
+ smsss gr7,gr8
+ test_gr_limmed 0x7fff,0xffff,gr8
+ test_gr_limmed 0x7fff,0xffff,gr7
+ test_spr_limmed 0x0000,0x0000,iacc0l ; 7fffffff*7fffffff+
+ test_spr_limmed 0x8000,0x0000,iacc0h ; bfffffff7fffffff
+ smsss34:
+ set_gr_limmed 0x7fff,0xffff,gr7 ; maximum overflow (neg)
+ set_gr_limmed 0x7fff,0xffff,gr8
+ set_spr_limmed 0x0000,0x0000,iacc0l
+ set_spr_limmed 0x8000,0x0000,iacc0h
+ smsss gr7,gr8
+ test_gr_limmed 0x7fff,0xffff,gr8
+ test_gr_limmed 0x7fff,0xffff,gr7
+ test_spr_limmed 0x0000,0x0000,iacc0l ; 8000000000000000-
+ test_spr_limmed 0x8000,0x0000,iacc0h ; 7fffffff*7fffffff+
+ + pass
Index: sim/testsuite/sim/frv/fr400/smu.cgs
===================================================================
RCS file: sim/testsuite/sim/frv/fr400/smu.cgs
diff -N sim/testsuite/sim/frv/fr400/smu.cgs
*** /dev/null 1 Jan 1970 00:00:00 -0000
--- sim/testsuite/sim/frv/fr400/smu.cgs 1 Oct 2003 19:14:45 -0000
***************
*** 0 ****
--- 1,237 ----
+ # frv testcase for smu $GRi,$GRj
+ # mach: fr400
+ + .include "../testutils.inc"
+ + start
+ + .global smu
+ smu1:
+ ; Positive operands
+ set_gr_immed 3,gr7 ; multiply small numbers
+ set_gr_immed 2,gr8
+ smu gr7,gr8
+ test_gr_immed 3,gr7
+ test_gr_immed 2,gr8
+ test_spr_immed 6,iacc0l
+ test_spr_immed 0,iacc0h
+ smu2:
+ set_gr_immed 1,gr7 ; multiply by 1
+ set_gr_immed 2,gr8
+ smu gr7,gr8
+ test_gr_immed 1,gr7
+ test_gr_immed 2,gr8
+ test_spr_immed 2,iacc0l
+ test_spr_immed 0,iacc0h
+ smu3:
+ set_gr_immed 2,gr7 ; multiply by 1
+ set_gr_immed 1,gr8
+ smu gr7,gr8
+ test_gr_immed 1,gr8
+ test_gr_immed 2,gr7
+ test_spr_immed 2,iacc0l
+ test_spr_immed 0,iacc0h
+ smu4:
+ set_gr_immed 0,gr7 ; multiply by 0
+ set_gr_immed 2,gr8
+ smu gr7,gr8
+ test_gr_immed 2,gr8
+ test_gr_immed 0,gr7
+ test_spr_immed 0,iacc0l
+ test_spr_immed 0,iacc0h
+ smu5:
+ set_gr_immed 2,gr7 ; multiply by 0
+ set_gr_immed 0,gr8
+ smu gr7,gr8
+ test_gr_immed 0,gr8
+ test_gr_immed 2,gr7
+ test_spr_immed 0,iacc0l
+ test_spr_immed 0,iacc0h
+ smu6:
+ set_gr_limmed 0x3fff,0xffff,gr7 ; 31 bit result
+ set_gr_immed 2,gr8
+ smu gr7,gr8
+ test_gr_immed 2,gr8
+ test_gr_limmed 0x3fff,0xffff,gr7
+ test_spr_limmed 0x7fff,0xfffe,iacc0l
+ test_spr_immed 0,iacc0h
+ smu7:
+ set_gr_limmed 0x4000,0x0000,gr7 ; 32 bit result
+ set_gr_immed 2,gr8
+ smu gr7,gr8
+ test_gr_immed 2,gr8
+ test_gr_limmed 0x4000,0x0000,gr7
+ test_spr_limmed 0x8000,0x0000,iacc0l
+ test_spr_immed 0,iacc0h
+ smu8:
+ set_gr_limmed 0x4000,0x0000,gr7 ; 33 bit result
+ set_gr_immed 4,gr8
+ smu gr7,gr8
+ test_gr_immed 4,gr8
+ test_gr_limmed 0x4000,0x0000,gr7
+ test_spr_immed 0,iacc0l
+ test_spr_immed 1,iacc0h
+ smu9:
+ set_gr_limmed 0x7fff,0xffff,gr7 ; max positive result
+ set_gr_limmed 0x7fff,0xffff,gr8
+ smu gr7,gr8
+ test_gr_limmed 0x7fff,0xffff,gr8
+ test_gr_limmed 0x7fff,0xffff,gr7
+ test_spr_immed 0x00000001,iacc0l
+ test_spr_limmed 0x3fff,0xffff,iacc0h
+ smu10:
+ ; Mixed operands
+ set_gr_immed -3,gr7 ; multiply small numbers
+ set_gr_immed 2,gr8
+ smu gr7,gr8
+ test_gr_immed 2,gr8
+ test_gr_immed -3,gr7
+ test_spr_immed -6,iacc0l
+ test_spr_immed -1,iacc0h
+ smu11:
+ set_gr_immed 3,gr7 ; multiply small numbers
+ set_gr_immed -2,gr8
+ smu gr7,gr8
+ test_gr_immed -2,gr8
+ test_gr_immed 3,gr7
+ test_spr_immed -6,iacc0l
+ test_spr_immed -1,iacc0h
+ smu12:
+ set_gr_immed 1,gr7 ; multiply by 1
+ set_gr_immed -2,gr8
+ smu gr7,gr8
+ test_gr_immed -2,gr8
+ test_gr_immed 1,gr7
+ test_spr_immed -2,iacc0l
+ test_spr_immed -1,iacc0h
+ smu13:
+ set_gr_immed -2,gr7 ; multiply by 1
+ set_gr_immed 1,gr8
+ smu gr7,gr8
+ test_gr_immed 1,gr8
+ test_gr_immed -2,gr7
+ test_spr_immed -2,iacc0l
+ test_spr_immed -1,iacc0h
+ smu14:
+ set_gr_immed 0,gr7 ; multiply by 0
+ set_gr_immed -2,gr8
+ smu gr7,gr8
+ test_gr_immed -2,gr8
+ test_gr_immed 0,gr7
+ test_spr_immed 0,iacc0l
+ test_spr_immed 0,iacc0h
+ smu15:
+ set_gr_immed -2,gr7 ; multiply by 0
+ set_gr_immed 0,gr8
+ smu gr7,gr8
+ test_gr_immed 0,gr8
+ test_gr_immed -2,gr7
+ test_spr_immed 0,iacc0l
+ test_spr_immed 0,iacc0h
+ smu16:
+ set_gr_limmed 0x2000,0x0001,gr7 ; 31 bit result
+ set_gr_immed -2,gr8
+ smu gr7,gr8
+ test_gr_immed -2,gr8
+ test_gr_limmed 0x2000,0x0001,gr7
+ test_spr_limmed 0xbfff,0xfffe,iacc0l
+ test_spr_limmed 0xffff,0xffff,iacc0h
+ smu17:
+ set_gr_limmed 0x4000,0x0000,gr7 ; 32 bit result
+ set_gr_immed -2,gr8
+ smu gr7,gr8
+ test_gr_immed -2,gr8
+ test_gr_limmed 0x4000,0x0000,gr7
+ test_spr_limmed 0x8000,0x0000,iacc0l
+ test_spr_limmed 0xffff,0xffff,iacc0h
+ smu18:
+ set_gr_limmed 0x4000,0x0001,gr7 ; 32 bit result
+ set_gr_immed -2,gr8
+ smu gr7,gr8
+ test_gr_immed -2,gr8
+ test_gr_limmed 0x4000,0x0001,gr7
+ test_spr_limmed 0x7fff,0xfffe,iacc0l
+ test_spr_limmed 0xffff,0xffff,iacc0h
+ smu19:
+ set_gr_limmed 0x4000,0x0000,gr7 ; 33 bit result
+ set_gr_immed -4,gr8
+ smu gr7,gr8
+ test_gr_immed -4,gr8
+ test_gr_limmed 0x4000,0x0000,gr7
+ test_spr_limmed 0x0000,0x0000,iacc0l
+ test_spr_limmed 0xffff,0xffff,iacc0h
+ smu20:
+ set_gr_limmed 0x7fff,0xffff,gr7 ; max negative result
+ set_gr_limmed 0x8000,0x0000,gr8
+ smu gr7,gr8
+ test_gr_limmed 0x8000,0x0000,gr8
+ test_gr_limmed 0x7fff,0xffff,gr7
+ test_spr_limmed 0x8000,0x0000,iacc0l
+ test_spr_limmed 0xc000,0x0000,iacc0h
+ smu21:
+ ; Negative operands
+ set_gr_immed -3,gr7 ; multiply small numbers
+ set_gr_immed -2,gr8
+ smu gr7,gr8
+ test_gr_immed -2,gr8
+ test_gr_immed -3,gr7
+ test_spr_immed 6,iacc0l
+ test_spr_immed 0,iacc0h
+ smu22:
+ set_gr_immed -1,gr7 ; multiply by 1
+ set_gr_immed -2,gr8
+ smu gr7,gr8
+ test_gr_immed -2,gr8
+ test_gr_immed -1,gr7
+ test_spr_immed 2,iacc0l
+ test_spr_immed 0,iacc0h
+ smu23:
+ set_gr_immed -2,gr7 ; multiply by 1
+ set_gr_immed -1,gr8
+ smu gr7,gr8
+ test_gr_immed -1,gr8
+ test_gr_immed -2,gr7
+ test_spr_immed 2,iacc0l
+ test_spr_immed 0,iacc0h
+ smu24:
+ set_gr_limmed 0xc000,0x0001,gr7 ; 31 bit result
+ set_gr_immed -2,gr8
+ smu gr7,gr8
+ test_gr_immed -2,gr8
+ test_gr_limmed 0xc000,0x0001,gr7
+ test_spr_limmed 0x7fff,0xfffe,iacc0l
+ test_spr_immed 0,iacc0h
+ smu25:
+ set_gr_limmed 0xc000,0x0000,gr7 ; 32 bit result
+ set_gr_immed -2,gr8
+ smu gr7,gr8
+ test_gr_immed -2,gr8
+ test_gr_limmed 0xc000,0x0000,gr7
+ test_spr_limmed 0x8000,0x0000,iacc0l
+ test_spr_immed 0,iacc0h
+ smu26:
+ set_gr_limmed 0xc000,0x0000,gr7 ; 33 bit result
+ set_gr_immed -4,gr8
+ smu gr7,gr8
+ test_gr_immed -4,gr8
+ test_gr_limmed 0xc000,0x0000,gr7
+ test_spr_immed 0x00000000,iacc0l
+ test_spr_immed 1,iacc0h
+ smu27:
+ set_gr_limmed 0x8000,0x0001,gr7 ; almost max positive result
+ set_gr_limmed 0x8000,0x0001,gr8
+ smu gr7,gr8
+ test_gr_limmed 0x8000,0x0001,gr8
+ test_gr_limmed 0x8000,0x0001,gr7
+ test_spr_immed 0x00000001,iacc0l
+ test_spr_limmed 0x3fff,0xffff,iacc0h
+ smu28:
+ set_gr_limmed 0x8000,0x0000,gr7 ; max positive result
+ set_gr_limmed 0x8000,0x0000,gr8
+ smu gr7,gr8
+ test_gr_limmed 0x8000,0x0000,gr8
+ test_gr_limmed 0x8000,0x0000,gr7
+ test_spr_immed 0x00000000,iacc0l
+ test_spr_limmed 0x4000,0x0000,iacc0h
+ + pass
Index: sim/testsuite/sim/frv/fr400/subss.cgs
===================================================================
RCS file: sim/testsuite/sim/frv/fr400/subss.cgs
diff -N sim/testsuite/sim/frv/fr400/subss.cgs
*** /dev/null 1 Jan 1970 00:00:00 -0000
--- sim/testsuite/sim/frv/fr400/subss.cgs 1 Oct 2003 19:14:45 -0000
***************
*** 0 ****
--- 1,43 ----
+ # frv testcase for subss $GRi,$GRj,$GRk
+ # mach: fr400
+ + .include "../testutils.inc"
+ + start
+ + .global sub
+ sub_no_saturate:
+ set_gr_immed 1,gr7
+ set_gr_immed 2,gr8
+ subss gr8,gr7,gr8
+ test_gr_immed 1,gr8
+ + set_gr_immed 2,gr7
+ set_gr_immed 1,gr8
+ subss gr8,gr7,gr8
+ test_gr_limmed 0xffff,0xffff,gr8
+ + sub_saturate_neg:
+ set_gr_immed 1,gr7
+ set_gr_limmed 0x8000,0x0000,gr8
+ subss gr8,gr7,gr8
+ test_gr_limmed 0x8000,0x0000,gr8
+ + set_gr_limmed 0x7fff,0xffff,gr7
+ set_gr_limmed 0xffff,0xfff0,gr8
+ subss gr8,gr7,gr8
+ test_gr_limmed 0x8000,0x0000,gr8
+ + sub_saturate_pos:
+ set_gr_limmed 0xffff,0xffff,gr7
+ set_gr_limmed 0x7fff,0xffff,gr8
+ subss gr8,gr7,gr8
+ test_gr_limmed 0x7fff,0xffff,gr8
+ + set_gr_immed 0x0010,gr8
+ set_gr_limmed 0x8000,0x0000,gr7
+ subss gr8,gr7,gr8
+ test_gr_limmed 0x7fff,0xffff,gr8
+ + + pass



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