Skip to content

Commit b72b2c9

Browse files
authored
arm64: fix mov register encoding (#4030)
* arm64: emit mov using v16b to fix ci on arm64 ubuntu * Re-enable vec128_u test on arm64
1 parent f19d4dc commit b72b2c9

File tree

4 files changed

+15
-2
lines changed

4 files changed

+15
-2
lines changed

backend/arm64/emit.ml

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,8 @@ module DSL : sig
121121

122122
val emit_reg_v2d : Reg.t -> Arm64_ast.Operand.t
123123

124+
val emit_reg_v16b : Reg.t -> Arm64_ast.Operand.t
125+
124126
val imm : int -> Arm64_ast.Operand.t
125127

126128
val imm_float : float -> Arm64_ast.Operand.t
@@ -244,6 +246,8 @@ end = struct
244246

245247
let emit_reg_v2d reg = reg_v2d (reg_index reg)
246248

249+
let emit_reg_v16b reg = reg_v16b (reg_index reg)
250+
247251
let emit_reg_w reg = reg_w (reg_index reg)
248252

249253
let emit_reg_s reg = reg_s (reg_index reg)
@@ -1263,7 +1267,7 @@ let move (src : Reg.t) (dst : Reg.t) =
12631267
| Float, Reg _, Float, Reg _ | Float32, Reg _, Float32, Reg _ ->
12641268
DSL.ins I.FMOV [| DSL.emit_reg dst; DSL.emit_reg src |]
12651269
| (Vec128 | Valx2), Reg _, (Vec128 | Valx2), Reg _ ->
1266-
DSL.ins I.MOV [| DSL.emit_reg_v2d dst; DSL.emit_reg_v2d src |]
1270+
DSL.ins I.MOV [| DSL.emit_reg_v16b dst; DSL.emit_reg_v16b src |]
12671271
| (Int | Val | Addr), Reg _, (Int | Val | Addr), Reg _ ->
12681272
DSL.ins I.MOV [| DSL.emit_reg dst; DSL.emit_reg src |]
12691273
| _, Reg _, _, Stack _ ->

backend/arm64_ast.ml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,10 @@ module Reg = struct
148148
reg_array ~last:Neon_reg_name.last
149149
(Reg_name.Neon (Neon_reg_name.Vector V8B))
150150

151+
let reg_v16b_array =
152+
reg_array ~last:Neon_reg_name.last
153+
(Reg_name.Neon (Neon_reg_name.Vector V16B))
154+
151155
(* for special GP registers we use the last index *)
152156
let sp = create (GP SP) GP_reg_name.last
153157

@@ -671,6 +675,8 @@ module Operand = struct
671675
let reg_v2d = Array.map (fun x -> Reg x) Reg.reg_v2d_array
672676

673677
let reg_v8b = Array.map (fun x -> Reg x) Reg.reg_v8b_array
678+
679+
let reg_v16b = Array.map (fun x -> Reg x) Reg.reg_v16b_array
674680
end
675681

676682
module Instruction = struct
@@ -803,6 +809,8 @@ module DSL = struct
803809

804810
let reg_v2d index = Operand.reg_v2d.(index)
805811

812+
let reg_v16b index = Operand.reg_v16b.(index)
813+
806814
let reg_v8b index = Operand.reg_v8b.(index)
807815

808816
let reg_b index = Operand.reg_b.(index)

backend/arm64_ast.mli

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -324,6 +324,8 @@ module DSL : sig
324324

325325
val reg_v8b : int -> Operand.t
326326

327+
val reg_v16b : int -> Operand.t
328+
327329
val reg_b : int -> Operand.t
328330

329331
val reg_s : int -> Operand.t

testsuite/tests/typing-layouts-arrays/test_vec128_u_array.ml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
readonly_files = "gen_u_array.ml test_gen_u_array.ml";
33
modules = "${readonly_files} stubs.c";
44
include stdlib_upstream_compatible;
5-
arch_amd64;
65
flambda2;
76
{
87
flags = "-extension layouts_beta -extension simd_beta";

0 commit comments

Comments
 (0)