[openfirmware] [commit] r2490 - cpu/arm

repository service svn at openfirmware.info
Wed Aug 31 10:19:48 CEST 2011


Author: wmb
Date: Wed Aug 31 10:19:47 2011
New Revision: 2490
URL: http://tracker.coreboot.org/trac/openfirmware/changeset/2490

Log:
ARM - Improvements to assembler support for iwMMX instructions.

Modified:
   cpu/arm/assem.fth

Modified: cpu/arm/assem.fth
==============================================================================
--- cpu/arm/assem.fth	Wed Aug 31 09:33:46 2011	(r2489)
+++ cpu/arm/assem.fth	Wed Aug 31 10:19:47 2011	(r2490)
@@ -884,47 +884,21 @@
    )op
 ;
 
+: g?  ( -- flag )  newword 0000.0100 land 0<>  ;
+: {g}  ( -- )  ascii g parse-1  if  0000.0100 xop  then  ;
+
 : wcx  adt-wcx   0f 10 get-this  ;
+: wcx0 adt-wcx   0f  0 get-this  ;
 : wrd  adt-wmmx  0f 0c get-this  ;
 : wrd5 adt-wmmx  0f 05 get-this  ;
 : wrn  adt-wmmx  0f 10 get-this  ;
 : wrm  adt-wmmx  0f 00 get-this  ;
-: amode-wmmx-cdp  ( -- )
-   \ wrd, wrn, wrm
-   op(
-   wrd
-   wrn
-   wrm
-   )op
-;
-: amode-wmmx-cdp2  ( -- )
-   \ wrd, wrn
-   op(
-   wrd
-   wrn
-   )op
-;
-: imm3-0  
-   adt-immed  07 00 get-this
-;
-: amode-wmmx-cdp-imm  ( -- )
-   \ wrn, wrd, wrm
-   op(
-   wrn
-   wrd
-   wrm
-   adt-immed  07 14 get-this
-   )op
-;
-
-: amode-wmmx-transfer  ( -- )
-   \ wrd, rn, wrm
-   op(
-   wrd
-   adt-reg   0f 0c get-this
-   wrm
-   )op
-;
+: amode-wmmx-cdp  ( -- )  op( wrd wrn wrm )op  ;
+: amode-wmmx-cdp-g  ( -- )  op( wrd wrn  g? if  wcx0  else  wrm  then  )op  ;
+: amode-wmmx-cdp2  ( -- )  op( wrd wrn )op  ;
+: imm3-0  ( -- )  adt-immed  07 00 get-this  ;
+: amode-wmmx-cdp-imm  ( -- )  op( wrn wrd wrm   adt-immed  07 14 get-this  )op  ;
+: amode-wmmx-transfer  ( -- )  op(  wrd  get-r12  wrm  )op  ;
 
 \ Get the offset for ldc, stc instructions.
 : get-off-c  ( -- )
@@ -1056,9 +1030,6 @@
    ascii s parse-1  if  0030.0000 xop  need-s  exit  then
    " us or ss" expecting
 ;
-: {g}
-   ascii g parse-1  if  0000.0100 xop  ( !! need to change mode of last operand from wrN to rN )  then
-;
 
 : parse-condition?  ( -- cond true | false )
    \ The next two characters of the input string will be checked for a
@@ -1092,6 +1063,9 @@
 ;
 : {cond/s}  ( opcode -- )  {cond} {s}  ;
 
+: do-mmx  ( opc -- )  0e00.0000 or  {cond}  amode-wmmx-cdp  ;
+: do-mmx-shift  ( opc -- )  0e00.0000 or  {hwd} {g} +{cond}  amode-wmmx-cdp-g  ;
+
 : amode-wldst  ( -- )
    op(
    get-whatever
@@ -1099,7 +1073,7 @@
       adt-wcx  of
          0c set-field
 	 f000.0000 iop
-         newword 0040.0010 and 0000.0010 <>  if
+         newword 0040.0100 and 0000.0100 <>  if
 	    " Size must be W for WLDR or WSTR with wCX" ad-error
 	 then
       endof
@@ -1261,7 +1235,6 @@
 : mcr    0e00.0010 {cond}   amode-copr   ;
 : mrc    0e10.0010 {cond}   amode-copr   ;
 
-: do-mmx  ( opc -- )  0e00.0000 or  {cond}  amode-wmmx-cdp  ;
 : wor     0000.0000 do-mmx ;
 : wxor    0010.0000 do-mmx ;
 : wand    0020.0000 do-mmx ;
@@ -1277,7 +1250,6 @@
 : walignr2 00a0.0020 do-mmx ;
 : walignr3 00b0.0020 do-mmx ;
 
-: do-mmx-shift  ( opc -- )  0e00.0000 or  {hwd} {g} +{cond}  amode-wmmx-cdp  ;
 : wsra     0000.0040 do-mmx-shift ;
 : wsll     0010.0040 do-mmx-shift ;
 : wsll     0020.0040 do-mmx-shift ;



More information about the openfirmware mailing list