Skip to content

Commit 0a82918

Browse files
authored
native: unify registers, refactor (#25483)
1 parent 990145a commit 0a82918

File tree

10 files changed

+909
-854
lines changed

10 files changed

+909
-854
lines changed

vlib/v/gen/native/amd64.v

Lines changed: 513 additions & 433 deletions
Large diffs are not rendered by default.

vlib/v/gen/native/arm64.v

Lines changed: 158 additions & 155 deletions
Large diffs are not rendered by default.

vlib/v/gen/native/array.v

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ module native
77
import v.ast
88
99
fn (mut g Gen) allocate_raw_array(name string, size i32, items i32) i32 {
10-
pos := g.code_gen.allocate_var(name, size, items)
10+
pos := g.cg.cg_allocate_var(name, size, items)
1111
g.stack_var_pos += (size * items)
1212
return pos
1313
}
@@ -82,7 +82,7 @@ fn (mut g Gen) array_init_with_fields(var Var, node ast.ArrayInit, elem_type ast
8282
g.n_error('arrays of arrays and arrays of maps not implemented yet')
8383
}
8484
85-
// g.code_gen.call_with_args(function_addr, [len, cap, elem_size_expr, default_expr])
85+
// g.cg.call_with_args(function_addr, [len, cap, elem_size_expr, default_expr])
8686
}
8787
8888
fn (mut g Gen) array_init_from_raw(var Var) {

vlib/v/gen/native/builtins.v

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -29,21 +29,21 @@ pub fn (mut g Gen) init_builtins() {
2929
.int_to_string: BuiltinFn{
3030
// 32-bit signed integer to string conversion
3131
body: fn (builtin BuiltinFn, mut g Gen) {
32-
g.code_gen.convert_int_to_string(builtin.arg_regs[0], builtin.arg_regs[1])
32+
g.cg.cg_convert_int_to_string(builtin.arg_regs[0], builtin.arg_regs[1])
3333
}
34-
arg_regs: [Amd64Register.rcx, Amd64Register.rdi] // rcx: int to convert, rdi: end of 32byte buffer (with 4 bytes at the beggining for len) see allocate_array
34+
arg_regs: [.reg1, .reg3] // reg1: int to convert, reg3: end of 32byte buffer (with 4 bytes at the beggining for len) see allocate_array
3535
}
3636
.bool_to_string: BuiltinFn{
3737
body: fn (builtin BuiltinFn, mut g Gen) {
38-
g.code_gen.convert_bool_to_string(builtin.arg_regs[0])
38+
g.cg.cg_convert_bool_to_string(builtin.arg_regs[0])
3939
}
40-
arg_regs: [Amd64Register.rax]
40+
arg_regs: [.reg0]
4141
}
4242
.reverse_string: BuiltinFn{
4343
body: fn (builtin BuiltinFn, mut g Gen) {
44-
g.code_gen.reverse_string(builtin.arg_regs[0])
44+
g.cg.cg_reverse_string(builtin.arg_regs[0])
4545
}
46-
arg_regs: [Amd64Register.rdi]
46+
arg_regs: [.reg3]
4747
}
4848
}
4949
}
@@ -64,13 +64,13 @@ pub fn (mut g Gen) generate_builtins() {
6464
g.defer_stmts.clear()
6565
g.labels = &LabelTable{}
6666

67-
g.code_gen.builtin_decl(builtin)
67+
g.cg.cg_builtin_decl(builtin)
6868

6969
g.patch_labels()
7070

7171
// patch all call addresses where this builtin gets called
7272
for call in builtin.calls {
73-
rel := g.code_gen.call_addr_at(i32(call_addr), call)
73+
rel := g.cg.cg_call_addr_at(i32(call_addr), call)
7474
g.write32_at(call + 1, i32(rel))
7575
}
7676
}
@@ -85,5 +85,5 @@ pub fn (mut g Gen) get_builtin_arg_reg(name Builtin, index i32) Register {
8585
}
8686

8787
pub fn (mut g Gen) call_builtin(name Builtin) {
88-
g.builtins[name].calls << g.code_gen.call_builtin(name)
88+
g.builtins[name].calls << g.cg.cg_call_builtin(name)
8989
}

vlib/v/gen/native/elf.v

Lines changed: 6 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -822,7 +822,7 @@ pub fn (mut g Gen) generate_linkable_elf_header() {
822822
eprintln('${@LOCATION} unsupported size ${size} for global `${fi.name}`')
823823
} else if fi.expr !is ast.EmptyExpr {
824824
g.expr(fi.expr)
825-
g.code_gen.mov_reg_to_var(GlobalVar{fi.name, fi.typ}, g.code_gen.main_reg())
825+
g.cg.cg_mov_reg_to_var(GlobalVar{fi.name, fi.typ}, .reg0)
826826
g.println('; global ${fi.name}, size: ${size}')
827827
}
828828
}
@@ -831,10 +831,10 @@ pub fn (mut g Gen) generate_linkable_elf_header() {
831831
}
832832

833833
g.elf_main_call_pos = g.pos()
834-
g.code_gen.call(placeholder)
834+
g.cg.cg_call(placeholder)
835835
g.println('; call main.main')
836-
g.code_gen.mov64(g.code_gen.main_reg(), i64(0))
837-
g.code_gen.ret()
836+
g.cg.cg_mov64(.reg0, i64(0))
837+
g.cg.cg_ret()
838838
g.println('; return 0')
839839

840840
g.debug_pos = i32(g.buf.len)
@@ -869,25 +869,11 @@ pub fn (mut g Gen) generate_simple_elf_header() {
869869
g.code_start_pos = g.pos()
870870
g.debug_pos = i32(g.pos())
871871

872-
g.code_gen.call(placeholder)
872+
g.cg.cg_call(placeholder)
873873
g.println('; call main.main')
874874

875875
// generate exit syscall
876-
match g.pref.arch {
877-
.arm64 {
878-
g.code_gen.mov(Arm64Register.x16, 0)
879-
g.code_gen.mov(Arm64Register.x0, 0)
880-
g.code_gen.svc()
881-
}
882-
.amd64 {
883-
g.code_gen.mov(Amd64Register.edi, 0)
884-
g.code_gen.mov(Amd64Register.eax, g.nsyscall(.exit))
885-
g.code_gen.syscall()
886-
}
887-
else {
888-
g.n_error('unsupported platform ${g.pref.arch}')
889-
}
890-
}
876+
g.cg.cg_gen_exit(ast.IntegerLiteral{ val: '0' })
891877
}
892878

893879
pub fn (mut g Gen) elf_string_table() {

0 commit comments

Comments
 (0)