Add qemu 2.4.0
[kvmfornfv.git] / qemu / roms / SLOF / slof / fs / rmove.fs
diff --git a/qemu/roms/SLOF/slof/fs/rmove.fs b/qemu/roms/SLOF/slof/fs/rmove.fs
new file mode 100644 (file)
index 0000000..c28dba9
--- /dev/null
@@ -0,0 +1,53 @@
+\ *****************************************************************************
+\ * Copyright (c) 2004, 2008 IBM Corporation
+\ * All rights reserved.
+\ * This program and the accompanying materials
+\ * are made available under the terms of the BSD License
+\ * which accompanies this distribution, and is available at
+\ * http://www.opensource.org/licenses/bsd-license.php
+\ *
+\ * Contributors:
+\ *     IBM Corporation - initial implementation
+\ ****************************************************************************/
+
+defer '(r@)
+defer '(r!)
+1 VALUE /(r)
+
+
+\ The rest of the code already implemented in prim.in
+\ In the end all of this should be moved over there and this file terminated
+
+: (rfill) ( addr size pattern 'r! /r -- )
+       to /(r) to '(r!) ff and
+       dup 8 lshift or dup 10 lshift or dup 20 lshift or
+       -rot bounds ?do dup i '(r!) /(r) +loop drop
+;
+
+: (fwrmove) ( src dest size -- )
+       >r 0 -rot r> bounds ?do + dup '(r@) i '(r!) /(r) dup +loop 2drop
+;
+
+\ Move from main to device memory
+: mrmove ( src dest size -- )
+       3dup or or 7 AND CASE
+               0 OF ['] x@ ['] rx! /x ENDOF
+               4 OF ['] l@ ['] rl! /l ENDOF
+               2 OF ['] w@ ['] rw! /w ENDOF
+               dup OF ['] c@ ['] rb! /c ENDOF
+       ENDCASE
+       ( We already know that source and destination do not overlap )
+       to /(r) to '(r!) to '(r@) (fwrmove)
+;
+
+: rfill ( addr size pattern -- )
+       3dup drop or 7 AND CASE
+               0 OF ['] rx! /x ENDOF
+               4 OF ['] rl! /l ENDOF
+               2 OF ['] rw! /w ENDOF
+               dup OF ['] rb! /c ENDOF
+       ENDCASE (rfill)
+;
+
+
+