| \ |
| \ Copyright (C) 2009 Stefan Reinauer |
| \ |
| \ See the file "COPYING" for further information about |
| \ the copyright and warranty status of this work. |
| \ |
| |
| \ Implementation of IEEE Draft Std P1275.6/D5 |
| \ Standard for Boot (Initialization Configuration) Firmware |
| \ 64 Bit Extensions |
| |
| |
| cell /x = constant 64bit? |
| |
| 64bit? [IF] |
| |
| : 32>64 ( 32bitsigned -- 64bitsigned ) |
| dup 80000000 and if \ is it negative? |
| ffffffff00000000 or \ then set all high bits |
| then |
| ; |
| |
| : 64>32 ( 64bitsigned -- 32bitsigned ) |
| h# ffffffff and |
| ; |
| |
| : lxjoin ( quad.lo quad.hi -- o ) |
| d# 32 lshift or |
| ; |
| |
| : wxjoin ( w.lo w.2 w.3 w.hi -- o ) |
| wljoin >r wljoin r> lxjoin |
| ; |
| |
| : bxjoin ( b.lo b.2 b.3 b.4 b.5 b.6 b.7 b.hi -- o ) |
| bljoin >r bljoin r> lxjoin |
| ; |
| |
| : <l@ ( qaddr -- n ) |
| l@ 32>64 |
| ; |
| |
| : unaligned-x@ ( addr - o ) |
| dup la1+ unaligned-l@ 64>32 swap unaligned-l@ 64>32 lxjoin |
| ; |
| |
| : unaligned-x! ( o oaddr -- ) |
| >r dup d# 32 rshift r@ unaligned-l! |
| h# ffffffff and r> la1+ unaligned-l! |
| ; |
| |
| : x@ ( oaddr -- o ) |
| unaligned-x@ \ for now |
| ; |
| |
| : x! ( o oaddr -- ) |
| unaligned-x! \ for now |
| ; |
| |
| : (rx@) ( oaddr - o ) |
| x@ |
| ; |
| |
| : (rx!) ( o oaddr -- ) |
| x! |
| ; |
| |
| : x, ( o -- ) |
| here /x allot x! |
| ; |
| |
| : /x* ( nu1 -- nu2 ) |
| /x * |
| ; |
| |
| : xa+ ( addr1 index -- addr2 ) |
| /x* + |
| ; |
| |
| : xa1+ ( addr1 -- addr2 ) |
| /x + |
| ; |
| |
| : xlsplit ( o -- quad.lo quad.hi ) |
| dup h# ffffffff and swap d# 32 rshift |
| ; |
| |
| : xwsplit ( o -- w.lo w.2 w.3 w.hi ) |
| xlsplit >r lwsplit r> lwsplit |
| ; |
| |
| : xbsplit ( o -- b.lo b.2 b.3 b.4 b.5 b.6 b.7 b.hi ) |
| xlsplit >r lbsplit r> lbsplit |
| ; |
| |
| : xlflip ( oct1 -- oct2 ) |
| xlsplit swap lxjoin |
| ; |
| |
| : xlflips ( oaddr len -- ) |
| bounds ?do |
| i unaligned-x@ xlflip i unaligned-x! |
| /x +loop |
| ; |
| |
| : xwflip ( oct1 -- oct2 ) |
| xlsplit lwflip swap lwflip lxjoin |
| ; |
| |
| : xwflips ( oaddr len -- ) |
| bounds ?do |
| i unaligned-x@ xwflip i unaligned-x! /x |
| +loop |
| ; |
| |
| : xbflip ( oct1 -- oct2 ) |
| xlsplit lbflip swap lbflip lxjoin |
| ; |
| |
| : xbflips ( oaddr len -- ) |
| bounds ?do |
| i unaligned-x@ xbflip i unaligned-x! |
| /x +loop |
| ; |
| |
| \ : b(lit) b(lit) 32>64 ; |
| |
| [THEN] |