46 lines
1.3 KiB
Factor
46 lines
1.3 KiB
Factor
|
! Copyright (C) 2007 Slava Pestov.
|
||
|
! See http://factorcode.org/license.txt for BSD license.
|
||
|
USING: alien arrays cpu.architecture cpu.arm.assembler
|
||
|
cpu.arm.architecture cpu.arm5.assembler kernel kernel.private
|
||
|
math math.private namespaces sequences words quotations
|
||
|
byte-arrays hashtables.private hashtables generator
|
||
|
generator.registers generator.fixup sequences.private
|
||
|
strings.private ;
|
||
|
IN: cpu.arm4
|
||
|
|
||
|
: (%char-slot)
|
||
|
"out" operand string-offset MOV
|
||
|
"out" operand dup "n" operand 2 <LSR> ADD ;
|
||
|
|
||
|
\ char-slot [
|
||
|
(%char-slot)
|
||
|
"out" operand "obj" operand "out" operand <+> LDRH
|
||
|
"out" operand dup %tag-fixnum
|
||
|
] H{
|
||
|
{ +input+ { { f "n" } { f "obj" } } }
|
||
|
{ +scratch+ { { f "out" } } }
|
||
|
{ +output+ { "out" } }
|
||
|
} define-intrinsic
|
||
|
|
||
|
\ set-char-slot [
|
||
|
"val" operand dup %untag-fixnum
|
||
|
(%char-slot)
|
||
|
"val" operand "obj" operand "out" operand <+> STRH
|
||
|
] H{
|
||
|
{ +input+ { { f "val" } { f "n" } { f "obj" } } }
|
||
|
{ +scratch+ { { f "out" } } }
|
||
|
{ +clobber+ { "val" } }
|
||
|
} define-intrinsic
|
||
|
|
||
|
\ alien-signed-1 [ LDRSB ]
|
||
|
\ set-alien-signed-1 [ STRB ]
|
||
|
define-alien-integer-intrinsics
|
||
|
|
||
|
\ alien-unsigned-2 [ LDRH ]
|
||
|
\ set-alien-unsigned-2 [ STRH ]
|
||
|
define-alien-integer-intrinsics
|
||
|
|
||
|
\ alien-signed-2 [ LDRSH ]
|
||
|
\ set-alien-signed-2 [ STRH ]
|
||
|
define-alien-integer-intrinsics
|