blob: d2f19e6506440749f6bb8f9f2e4be39098c1c82b [file] [log] [blame]
\ *****************************************************************************
\ * 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
\ ****************************************************************************/
: slof-build-id ( -- str len )
flash-header 10 + dup from-cstring a min
;
: slof-revision s" 001" ;
: read-version-and-date
flash-header 0= IF
s" " encode-string
ELSE
flash-header 10 + 10
here swap rmove
here 10
s" , " $cat
bdate2human $cat encode-string THEN
;
: invert-region ( addr len -- )
2dup or 7 and CASE
0 OF 3 rshift 0 ?DO dup dup rx@ -1 xor swap rx! xa1+ LOOP ENDOF
4 OF 2 rshift 0 ?DO dup dup rl@ -1 xor swap rl! la1+ LOOP ENDOF
3 and
2 OF 1 rshift 0 ?DO dup dup rw@ -1 xor swap rw! wa1+ LOOP ENDOF
dup OF 0 ?DO dup dup rb@ -1 xor swap rb! 1+ LOOP ENDOF
ENDCASE
drop
;
\ count the number of bits equal 1
\ the idea is to clear in each step the least significant bit
\ v&(v-1) does exactly this, so count the steps until v == 0
: cnt-bits ( 64-bit-value -- #bits=1 )
dup IF
41 1 DO dup 1- and dup 0= IF drop i LEAVE THEN LOOP
THEN
;