6e7c6d814a
arm can only load 10 bits and some funny logic so for now avoid big fffffff const
55 lines
1.1 KiB
Plaintext
55 lines
1.1 KiB
Plaintext
class Word < Object
|
|
|
|
int char_at(int index)
|
|
int word_index = index - 1
|
|
word_index = word_index >> 2
|
|
word_index = word_index + 3
|
|
int rest = index - 1
|
|
rest = rest.mod4()
|
|
int char = get_internal(word_index)
|
|
int shifted = 8 * rest
|
|
shifted = char >> shifted
|
|
int ret = shifted & 255
|
|
return ret
|
|
end
|
|
|
|
int set_length(int i)
|
|
set_internal( 2 , i)
|
|
return i
|
|
end
|
|
|
|
Word push_char(int char)
|
|
int index = self.char_length + 1
|
|
self.set_length(index)
|
|
|
|
int word_index = index - 1
|
|
word_index = word_index >> 2
|
|
word_index = word_index + 3
|
|
|
|
int rest = index - 1
|
|
rest = rest.mod4()
|
|
|
|
int shifted = rest * 8
|
|
shifted = char << shifted
|
|
|
|
int was = get_internal( word_index )
|
|
int mask = rest * 8
|
|
int const = 255 << 8
|
|
const = const + 255
|
|
const = const << 8
|
|
const = const + 255
|
|
const = const << 8
|
|
const = const + 255
|
|
|
|
mask = 255 << mask
|
|
mask = const - mask
|
|
|
|
int masked = was & mask
|
|
int put = masked + shifted
|
|
|
|
set_internal( word_index , put )
|
|
|
|
return self
|
|
end
|
|
end
|