diff options
author | Hans-Peter Nilsson <hp@axis.com> | 2009-01-07 01:09:24 +0000 |
---|---|---|
committer | Hans-Peter Nilsson <hp@axis.com> | 2009-01-07 01:09:24 +0000 |
commit | 6347aad80cc64963f855c83cb0e7ba3db2d3d8b2 (patch) | |
tree | 8a5a7b984703b85f1e4df4d183bc6a8449c0792b /cpu/frv.cpu | |
parent | 170ce85276e9bc98dd8e4ac34b3da18c80c2d968 (diff) | |
download | gdb-6347aad80cc64963f855c83cb0e7ba3db2d3d8b2.zip gdb-6347aad80cc64963f855c83cb0e7ba3db2d3d8b2.tar.gz gdb-6347aad80cc64963f855c83cb0e7ba3db2d3d8b2.tar.bz2 |
* frv.cpu (mabshs): Explicitly sign-extend arguments of abs to DI.
(DI-ext-HI, DI-ext-UHI, DI-ext-DI): New pmacros.
(media-arith-sat-semantics): Explicitly sign- or zero-extend
arguments of "operation" to DI using "mode" and the new pmacros.
Diffstat (limited to 'cpu/frv.cpu')
-rw-r--r-- | cpu/frv.cpu | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/cpu/frv.cpu b/cpu/frv.cpu index 78d031f..8935924 100644 --- a/cpu/frv.cpu +++ b/cpu/frv.cpu @@ -1,6 +1,6 @@ ; Fujitsu FRV opcode support, for GNU Binutils. -*- Scheme -*- ; -; Copyright 2000, 2001, 2003, 2004, 2007 Free Software Foundation, Inc. +; Copyright 2000, 2001, 2003, 2004, 2007, 2009 Free Software Foundation, Inc. ; ; Contributed by Red Hat Inc; developed under contract from Fujitsu. ; @@ -8229,18 +8229,28 @@ (set FRintk (c-raw-call SI "frv_ref_SI" FRintk)) (set arghi (halfword hi FRintj 0)) (set arglo (halfword lo FRintj 0)) - (saturate-v (abs arghi) 32767 -32768 (msr-sie-fri-hi) + ; We extend the argument before the abs operation so we can + ; notice -32768 overflowing as 32768. + (saturate-v (abs (ext DI arghi)) 32767 -32768 (msr-sie-fri-hi) (halfword hi FRintk 0)) - (saturate-v (abs arglo) 32767 -32768 (msr-sie-fri-lo) + (saturate-v (abs (ext DI arglo)) 32767 -32768 (msr-sie-fri-lo) (halfword lo FRintk 0))) ((fr400 (unit u-media-1)) (fr450 (unit u-media-1)) (fr550 (unit u-media))) ) +; How to extend from a mode to get the intended signedness. +(define-pmacro (DI-ext-HI x) (ext DI x)) +(define-pmacro (DI-ext-UHI x) (zext DI x)) +(define-pmacro (DI-ext-DI x) x) + (define-pmacro (media-arith-sat-semantics operation arg1 arg2 res mode max min sie) (sequence ((DI tmp)) - (set tmp (operation arg1 arg2)) + ; Make sure we saturate at max/min against a value that is + ; sign- or zero-extended appropriately from "mode". + (set tmp (operation DI + ((.sym DI-ext- mode) arg1) ((.sym DI-ext- mode) arg2))) (saturate-v tmp max min sie res)) ) |