* Added bytevector-u32-native-ref, bytevector-u32-native-set!,
bytevector-s32-native-ref, and bytevector-s32-native-set!
This commit is contained in:
parent
d6ed7b8a4d
commit
e6f678bb52
BIN
src/ikarus.boot
BIN
src/ikarus.boot
Binary file not shown.
|
@ -4,6 +4,8 @@
|
|||
bytevector-u8-ref bytevector-u8-set! bytevector-s8-set!
|
||||
bytevector-copy! u8-list->bytevector bytevector->u8-list
|
||||
bytevector-u16-native-ref bytevector-u16-native-set!
|
||||
bytevector-u32-native-ref bytevector-u32-native-set!
|
||||
bytevector-s32-native-ref bytevector-s32-native-set!
|
||||
bytevector-u16-ref bytevector-u16-set!
|
||||
bytevector-u32-ref bytevector-u32-set!
|
||||
bytevector-s32-ref bytevector-s32-set!
|
||||
|
@ -21,6 +23,8 @@
|
|||
bytevector-u8-ref bytevector-u8-set! bytevector-s8-set!
|
||||
bytevector-copy! u8-list->bytevector bytevector->u8-list
|
||||
bytevector-u16-native-ref bytevector-u16-native-set!
|
||||
bytevector-u32-native-ref bytevector-u32-native-set!
|
||||
bytevector-s32-native-ref bytevector-s32-native-set!
|
||||
bytevector-u16-ref bytevector-u16-set!
|
||||
bytevector-u32-ref bytevector-u32-set!
|
||||
bytevector-s32-ref bytevector-s32-set!
|
||||
|
@ -123,21 +127,6 @@
|
|||
(error 'bytevector-u16-native-ref "invalid index ~s" i))
|
||||
(error 'bytevector-u16-native-ref "~s is not a bytevector" x))))
|
||||
|
||||
(define bytevector-u32-native-ref ;;; HARDCODED
|
||||
(lambda (x i)
|
||||
(if (bytevector? x)
|
||||
(if (and (fixnum? i)
|
||||
($fx<= 0 i)
|
||||
($fx< i ($fx- ($bytevector-length x) 3))
|
||||
($fxzero? ($fxlogand i 3)))
|
||||
(+ (* ($bytevector-u8-ref x i) #x1000000)
|
||||
($fxlogor
|
||||
($fxsll ($bytevector-u8-ref x ($fx+ i 1)) 16)
|
||||
($fxlogor
|
||||
($fxsll ($bytevector-u8-ref x ($fx+ i 2)) 8)
|
||||
($bytevector-u8-ref x ($fx+ i 3)))))
|
||||
(error 'bytevector-u32-native-ref "invalid index ~s" i))
|
||||
(error 'bytevector-u32-native-ref "~s is not a bytevector" x))))
|
||||
|
||||
(define bytevector-u16-native-set! ;;; HARDCODED
|
||||
(lambda (x i n)
|
||||
|
@ -156,25 +145,6 @@
|
|||
(error 'bytevector-u16-native-set! "invalid value ~s" n))
|
||||
(error 'bytevector-u16-native-set! "~s is not a bytevector" x))))
|
||||
|
||||
(define bytevector-u32-native-set! ;;; HARDCODED
|
||||
(lambda (x i n)
|
||||
(if (bytevector? x)
|
||||
(if (and (or (fixnum? n) (bignum? n))
|
||||
(<= 0 n)
|
||||
(<= n #xFFFFFFFF))
|
||||
(if (and (fixnum? i)
|
||||
($fx<= 0 i)
|
||||
($fx< i ($fx- ($bytevector-length x) 3))
|
||||
($fxzero? ($fxlogand i 3)))
|
||||
(begin
|
||||
($bytevector-set! x i (quotient n #x1000000))
|
||||
($bytevector-set! x ($fx+ i 1) (quotient x #x10000))
|
||||
($bytevector-set! x ($fx+ i 2) (quotient x #x100))
|
||||
($bytevector-set! x ($fx+ i 3) (remainder n #x100)))
|
||||
(error 'bytevector-u32-native-set! "invalid index ~s" i))
|
||||
(error 'bytevector-u32-native-set! "invalid value ~s" n))
|
||||
(error 'bytevector-u32-native-set! "~s is not a bytevector" x))))
|
||||
|
||||
(define bytevector-s16-native-set! ;;; HARDCODED
|
||||
(lambda (x i n)
|
||||
(if (bytevector? x)
|
||||
|
@ -249,6 +219,21 @@
|
|||
(error 'bytevector-u32-ref "invalid index ~s" i))
|
||||
(error 'bytevector-u32-ref "~s is not a bytevector" x))))
|
||||
|
||||
(define bytevector-u32-native-ref
|
||||
(lambda (x i)
|
||||
(if (bytevector? x)
|
||||
(if (and (fixnum? i)
|
||||
($fx<= 0 i)
|
||||
($fx= 0 ($fxlogand i 3))
|
||||
($fx< i ($fx- ($bytevector-length x) 3)))
|
||||
(+ (sll ($bytevector-u8-ref x i) 24)
|
||||
($fxlogor
|
||||
($fxsll ($bytevector-u8-ref x ($fx+ i 1)) 16)
|
||||
($fxlogor
|
||||
($fxsll ($bytevector-u8-ref x ($fx+ i 2)) 8)
|
||||
($bytevector-u8-ref x ($fx+ i 3)))))
|
||||
(error 'bytevector-u32-native-ref "invalid index ~s" i))
|
||||
(error 'bytevector-u32-native-ref "~s is not a bytevector" x))))
|
||||
|
||||
(define bytevector-s32-ref
|
||||
(lambda (x i end)
|
||||
|
@ -275,6 +260,22 @@
|
|||
(error 'bytevector-s32-ref "invalid index ~s" i))
|
||||
(error 'bytevector-s32-ref "~s is not a bytevector" x))))
|
||||
|
||||
(define bytevector-s32-native-ref
|
||||
(lambda (x i)
|
||||
(if (bytevector? x)
|
||||
(if (and (fixnum? i)
|
||||
($fx<= 0 i)
|
||||
($fx= 0 ($fxlogand i 3))
|
||||
($fx< i ($fx- ($bytevector-length x) 3)))
|
||||
(+ (sll ($bytevector-s8-ref x i) 24)
|
||||
($fxlogor
|
||||
($fxsll ($bytevector-u8-ref x ($fx+ i 1)) 16)
|
||||
($fxlogor
|
||||
($fxsll ($bytevector-u8-ref x ($fx+ i 2)) 8)
|
||||
($bytevector-u8-ref x ($fx+ i 3)))))
|
||||
(error 'bytevector-s32-native-ref "invalid index ~s" i))
|
||||
(error 'bytevector-s32-native-ref "~s is not a bytevector" x))))
|
||||
|
||||
(define bytevector-u16-set!
|
||||
(lambda (x i n end)
|
||||
(if (bytevector? x)
|
||||
|
@ -328,6 +329,52 @@
|
|||
(error 'bytevector-u32-set! "invalid value ~s" n))
|
||||
(error 'bytevector-u32-set! "~s is not a bytevector" x))))
|
||||
|
||||
(define bytevector-u32-native-set!
|
||||
(lambda (x i n)
|
||||
(if (bytevector? x)
|
||||
(if (if (fixnum? n)
|
||||
($fx>= n 0)
|
||||
(if (bignum? n)
|
||||
(<= 0 n #xFFFFFFFF)
|
||||
#f))
|
||||
(if (and (fixnum? i)
|
||||
($fx<= 0 i)
|
||||
($fx= 0 ($fxlogand i 3))
|
||||
($fx< i ($fx- ($bytevector-length x) 3)))
|
||||
(begin
|
||||
(let ([b (sra n 16)])
|
||||
($bytevector-set! x i ($fxsra b 8))
|
||||
($bytevector-set! x ($fx+ i 1) b))
|
||||
(let ([b (logand n #xFFFF)])
|
||||
($bytevector-set! x ($fx+ i 2) ($fxsra b 8))
|
||||
($bytevector-set! x ($fx+ i 3) b)))
|
||||
(error 'bytevector-u32-native-set! "invalid index ~s" i))
|
||||
(error 'bytevector-u32-native-set! "invalid value ~s" n))
|
||||
(error 'bytevector-u32-native-set! "~s is not a bytevector" x))))
|
||||
|
||||
|
||||
(define bytevector-s32-native-set!
|
||||
(lambda (x i n)
|
||||
(if (bytevector? x)
|
||||
(if (if (fixnum? n)
|
||||
#t
|
||||
(if (bignum? n)
|
||||
(<= #x-80000000 n #x7FFFFFFF)
|
||||
#f))
|
||||
(if (and (fixnum? i)
|
||||
($fx<= 0 i)
|
||||
($fx= 0 ($fxlogand i 3))
|
||||
($fx< i ($fx- ($bytevector-length x) 3)))
|
||||
(begin
|
||||
(let ([b (sra n 16)])
|
||||
($bytevector-set! x i ($fxsra b 8))
|
||||
($bytevector-set! x ($fx+ i 1) b))
|
||||
(let ([b (logand n #xFFFF)])
|
||||
($bytevector-set! x ($fx+ i 2) ($fxsra b 8))
|
||||
($bytevector-set! x ($fx+ i 3) b)))
|
||||
(error 'bytevector-s32-native-set! "invalid index ~s" i))
|
||||
(error 'bytevector-s32-native-set! "invalid value ~s" n))
|
||||
(error 'bytevector-s32-native-set! "~s is not a bytevector" x))))
|
||||
|
||||
(define bytevector-s32-set!
|
||||
(lambda (x i n end)
|
||||
|
|
|
@ -408,12 +408,16 @@
|
|||
[bytevector-u32-set! i]
|
||||
[bytevector-s32-ref i]
|
||||
[bytevector-s32-set! i]
|
||||
[bytevector-u16-native-ref i]
|
||||
[bytevector-u16-native-set! i]
|
||||
[bytevector-s16-ref i]
|
||||
[bytevector-s16-set! i]
|
||||
[bytevector-u16-native-ref i]
|
||||
[bytevector-u16-native-set! i]
|
||||
[bytevector-s16-native-ref i]
|
||||
[bytevector-s16-native-set! i]
|
||||
[bytevector-u32-native-ref i]
|
||||
[bytevector-u32-native-set! i]
|
||||
[bytevector-s32-native-ref i]
|
||||
[bytevector-s32-native-set! i]
|
||||
[bytevector->u8-list i]
|
||||
[u8-list->bytevector i]
|
||||
[bytevector-copy! i]
|
||||
|
|
|
@ -368,8 +368,8 @@
|
|||
[bytevector-s16-native-set! C bv]
|
||||
[bytevector-s16-ref C bv]
|
||||
[bytevector-s16-set! C bv]
|
||||
[bytevector-s32-native-ref S bv]
|
||||
[bytevector-s32-native-set! S bv]
|
||||
[bytevector-s32-native-ref C bv]
|
||||
[bytevector-s32-native-set! C bv]
|
||||
[bytevector-s32-ref C bv]
|
||||
[bytevector-s32-set! C bv]
|
||||
[bytevector-s64-native-ref S bv]
|
||||
|
@ -384,8 +384,8 @@
|
|||
[bytevector-u16-native-set! C bv]
|
||||
[bytevector-u16-ref C bv]
|
||||
[bytevector-u16-set! C bv]
|
||||
[bytevector-u32-native-ref S bv]
|
||||
[bytevector-u32-native-set! S bv]
|
||||
[bytevector-u32-native-ref C bv]
|
||||
[bytevector-u32-native-set! C bv]
|
||||
[bytevector-u32-ref C bv]
|
||||
[bytevector-u32-set! C bv]
|
||||
[bytevector-u64-native-ref S bv]
|
||||
|
|
Loading…
Reference in New Issue