]> gitweb.factorcode.org Git - factor.git/blob - basis/cpu/arm/assembler/64/64.factor
Rename and add sorting words
[factor.git] / basis / cpu / arm / assembler / 64 / 64.factor
1 ! Copyright (C) 2023 Doug Coleman.
2 ! Copyright (C) 2023 Giftpflanze.
3 ! See https://factorcode.org/license.txt for BSD license.
4 USING: cpu.arm.assembler cpu.arm.assembler.opcodes kernel math
5 math.bitwise ;
6 IN: cpu.arm.assembler.64
7
8 : encode-bitmask ( imm64 -- Nimmrimms ) 64 (encode-bitmask) ;
9
10 : ADC ( Rm Rn Rd -- ) ADC64-encode ;
11 : ADCS ( Rm Rn Rd -- ) ADCS64-encode ;
12
13 : ADDi ( uimm24 Rn Rd -- ) [ split-imm ] 2dip ADDi64-encode ;
14 : ADDr ( Rm Rn Rd -- ) [ 3 0 ] 2dip ADDer64-encode ;
15
16 : ANDi ( imm64 Rn Rd -- ) [ encode-bitmask ] 2dip ANDi64-encode ;
17 : ANDr ( Rm Rn Rd -- ) [ [ 0 ] dip 0 ] 2dip ANDsr64-encode ;
18
19 : ASRi ( uimm6 Rn Rd -- ) [ 6 ?ubits ] 2dip ASRi64-encode ;
20 : ASRr ( Rm Rn Rd -- ) ASRr64-encode ;
21
22 : BIC ( Rm Rn Rd -- ) [ [ 0 ] dip 0 ] 2dip BIC64-encode ;
23
24 : CBNZ ( simm21 Rt -- ) [ 2 ?>> 19 ?sbits ] dip CBNZ64-encode ;
25
26 : CMPi ( imm24 Rd -- ) [ split-imm ] dip CMPi64-encode ;
27 : CMPr ( Rm Rn -- ) [ 3 0 ] dip CMPer64-encode ;
28
29 ! cond is EQ NE CS HS CC LO MI PL VS VC HI LS GE LT GT LE AL NV
30 : CSEL ( Rm Rn Rd cond -- ) -rot CSEL64-encode ;
31 : CSET ( Rd cond -- ) swap CSET64-encode ;
32 : CSETM ( Rd cond -- ) swap CSETM64-encode ;
33
34 : EORi ( imm64 Rn Rd -- ) [ encode-bitmask ] 2dip EORi64-encode ;
35 : EORr ( Rm Rn Rd -- ) [ [ 0 ] dip 0 ] 2dip EORsr64-encode ;
36
37 : FPCR ( -- op0 op1 CRn CRm op2 ) 3 3 4 4 0 ;
38 : FPSR ( -- op0 op1 CRn CRm op2 ) 3 3 4 4 1 ;
39
40 : LDPpost ( simm10 Rn Rt2 Rt -- ) [ 3 ?>> 7 ?sbits ] 3dip swapd LDPpost64-encode ;
41 : LDPpre ( simm10 Rn Rt2 Rt -- ) [ 3 ?>> 7 ?sbits ] 3dip swapd LDPpre64-encode ;
42 : LDPsoff ( simm10 Rn Rt2 Rt -- ) [ 3 ?>> 7 ?sbits ] 3dip swapd LDPsoff64-encode ;
43
44 : LDRl ( simm21 Rt -- ) [ 2 ?>> 19 ?sbits ] dip LDRl64-encode ;
45 : LDRpost ( simm9 Rn Rt -- ) [ 9 ?sbits ] 2dip LDRpost64-encode ;
46 : LDRpre ( simm9 Rn Rt -- ) [ 9 ?sbits ] 2dip LDRpre64-encode ;
47 : LDRr ( Rm Rn Rt -- ) [ 3 0 ] 2dip LDRr64-encode ;
48 : LDRuoff ( uimm15 Rn Rt -- ) [ 3 ?>> 12 ?ubits ] 2dip LDRuoff64-encode ;
49
50 : LDRBr ( Rm Rn Rt -- ) [ 0 ] 2dip LDRBsr-encode ;
51 : LDRBuoff ( uimm12 Rn Rt -- ) [ 12 ?ubits ] 2dip LDRBuoff-encode ;
52
53 : LDRHuoff ( uimm13 Rn Rt -- ) [ 1 ?>> 12 ?ubits ] 2dip LDRHuoff-encode ;
54
55 : LDUR ( simm9 Rn Rt -- ) [ 9 ?sbits ] 2dip LDUR64-encode ;
56
57 : LSLi ( uimm6 Rn Rd -- ) [ 6 ?ubits ] 2dip LSLi64-encode ;
58 : LSLr ( Rm Rn Rd -- ) LSLr64-encode ;
59
60 : LSRi ( uimm6 Rn Rd -- ) [ 6 ?ubits ] 2dip LSRi64-encode ;
61
62 : MOVr ( Rn Rd -- ) MOVr64-encode ;
63 : MOVsp ( Rn Rd -- ) [ 0 ] 2dip MOVsp64-encode ;
64 : MOVwi ( imm16 Rt -- ) [ [ 0 ] dip 16 bits ] dip MOVwi64-encode ;
65
66 : MRS ( op0 op1 CRn CRm op2 Rt -- ) MRS-encode ;
67
68 : MSRr ( op0 op1 CRn CRm op2 Rt -- ) MSRr-encode ;
69
70 : MSUB ( Ra Rm Rn Rd -- ) [ swap ] 2dip MSUB64-encode ;
71
72 : MUL ( Rm Rn Rd -- ) MUL64-encode ;
73
74 : MVN ( Rm Rd -- ) [ [ 0 ] dip 0 ] dip MVN64-encode ;
75
76 : NEG ( Rm Rd -- ) [ [ 0 ] dip 0 ] dip NEG64-encode ;
77
78 : NZCV ( -- op0 op1 CRn CRm op2 ) 3 3 4 2 0 ;
79
80 : ORRr ( Rm Rn Rd -- ) [ [ 0 ] dip 0 ] 2dip ORRsr64-encode ;
81
82 : SDIV ( Rm Rn Rd -- ) SDIV64-encode ;
83
84 : STADD ( Rs Rn -- ) STADD64-encode ;
85
86 : STPpost ( simm10 Rn Rt2 Rt -- ) [ 3 ?>> 7 ?sbits ] 3dip swapd STPpost64-encode ;
87 : STPpre ( simm10 Rn Rt2 Rt -- ) [ 3 ?>> 7 ?sbits ] 3dip swapd STPpre64-encode ;
88 : STPsoff ( simm10 Rn Rt2 Rt -- ) [ 3 ?>> 7 ?sbits ] 3dip swapd STPsoff64-encode ;
89
90 : STRpre ( simm9 Rn Rt -- ) [ 9 ?sbits ] 2dip STRpre64-encode ;
91 : STRpost ( simm9 Rn Rt -- ) [ 9 ?sbits ] 2dip STRpost64-encode ;
92 : STRr ( Rm Rn Rt -- ) [ 3 0 ] 2dip STRr64-encode ;
93 : STRuoff ( uimm15 Rn Rt -- ) [ 3 ?>> 12 ?ubits ] 2dip STRuoff64-encode ;
94
95 : SUBi ( uimm24 Rn Rd -- ) [ split-imm ] 2dip SUBi64-encode ;
96 : SUBr ( Rm Rn Rd -- ) [ 3 0 ] 2dip SUBer64-encode ;
97
98 : TSTi ( imm64 Rn -- ) [ encode-bitmask ] dip TSTi64-encode ;