]> gitweb.factorcode.org Git - factor.git/blob - core/cpu/arm5/assembler/assembler.factor
Initial import
[factor.git] / core / cpu / arm5 / assembler / assembler.factor
1 ! Copyright (C) 2007 Slava Pestov.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: arrays generator generator.fixup kernel sequences words
4 namespaces math math.bitfields cpu.arm.assembler ;
5 IN: cpu.arm5.assembler
6
7 TUPLE: arm5-variant ;
8
9 GENERIC# (BX) 1 ( Rm l -- )
10
11 M: register (BX) ( Rm l -- )
12     {
13         { 1 24 }
14         { 1 21 }
15         { BIN: 1111 16 }
16         { BIN: 1111 12 }
17         { BIN: 1111 8 }
18         5
19         { 1 4 }
20         { register 0 }
21     } insn ;
22
23 M: word (BX) 0 swap (BX) rc-relative-arm-3 rel-word ;
24
25 M: label (BX) 0 swap (BX) rc-relative-arm-3 label-fixup ;
26
27 M: arm5-variant BX 0 (BX) ;
28
29 M: arm5-variant BLX 1 (BX) ;
30
31 ! More load and store instructions
32 GENERIC: addressing-mode-3 ( addressing-mode -- n )
33
34 : b>n/n ( b -- n n ) dup -4 shift swap HEX: f bitand ;
35
36 M: addressing addressing-mode-3
37     [ addressing-p ] keep
38     [ addressing-u ] keep
39     [ addressing-w ] keep
40     delegate addressing-mode-3
41     { 0 21 23 24 } bitfield ;
42
43 M: integer addressing-mode-3
44     b>n/n {
45         ! { 1 24 }
46         { 1 22 }
47         { 1 7 }
48         { 1 4 }
49         0
50         8
51     } bitfield ;
52
53 M: object addressing-mode-3
54     shifter-op {
55         ! { 1 24 }
56         { 1 7 }
57         { 1 4 }
58         0
59     } bitfield ;
60
61 : addr3 ( Rn Rd addressing-mode h l s -- )
62     {
63         6
64         20
65         5
66         { addressing-mode-3 0 }
67         { register 16 }
68         { register 12 }
69     } insn ;
70
71 : LDRH 1 1 0 addr3 ;
72 : LDRSB 0 1 1 addr3 ;
73 : LDRSH 1 1 1 addr3 ;
74 : STRH 1 0 0 addr3 ;