| ... | ... | @@ -12,10 +12,11 @@ pub fn addCases(ctx: *TestContext) void { |
| 12 | 12 | \\ |
| 13 | 13 | \\@entry = fn(@fnty, { |
| 14 | 14 | \\ %a = str("\x32\x08\x01\x0a") |
| 15 | | \\ %eptr0 = elemptr(%a, @0) |
| 16 | | \\ %eptr1 = elemptr(%a, @1) |
| 17 | | \\ %eptr2 = elemptr(%a, @2) |
| 18 | | \\ %eptr3 = elemptr(%a, @3) |
| 15 | \\ %aref = ref(%a) |
| 16 | \\ %eptr0 = elemptr(%aref, @0) |
| 17 | \\ %eptr1 = elemptr(%aref, @1) |
| 18 | \\ %eptr2 = elemptr(%aref, @2) |
| 19 | \\ %eptr3 = elemptr(%aref, @3) |
| 19 | 20 | \\ %v0 = deref(%eptr0) |
| 20 | 21 | \\ %v1 = deref(%eptr1) |
| 21 | 22 | \\ %v2 = deref(%eptr2) |
| ... | ... | @@ -34,7 +35,8 @@ pub fn addCases(ctx: *TestContext) void { |
| 34 | 35 | \\}) |
| 35 | 36 | \\ |
| 36 | 37 | \\@9 = str("entry") |
| 37 | | \\@10 = export(@9, @entry) |
| 38 | \\@10 = ref(@9) |
| 39 | \\@11 = export(@10, @entry) |
| 38 | 40 | , |
| 39 | 41 | \\@0 = primitive(void) |
| 40 | 42 | \\@1 = fntype([], @0, cc=C) |
| ... | ... | @@ -42,7 +44,8 @@ pub fn addCases(ctx: *TestContext) void { |
| 42 | 44 | \\ %0 = return() |
| 43 | 45 | \\}) |
| 44 | 46 | \\@3 = str("entry") |
| 45 | | \\@4 = export(@3, @2) |
| 47 | \\@4 = ref(@3) |
| 48 | \\@5 = export(@4, @2) |
| 46 | 49 | \\ |
| 47 | 50 | ); |
| 48 | 51 | |
| ... | ... | @@ -55,51 +58,71 @@ pub fn addCases(ctx: *TestContext) void { |
| 55 | 58 | } |
| 56 | 59 | |
| 57 | 60 | ctx.addZIRCompareOutput("hello world ZIR", |
| 58 | | \\@0 = str("Hello, world!\n") |
| 59 | | \\@1 = primitive(noreturn) |
| 60 | | \\@2 = primitive(usize) |
| 61 | | \\@3 = fntype([], @1, cc=Naked) |
| 62 | | \\@4 = int(0) |
| 63 | | \\@5 = int(1) |
| 64 | | \\@6 = int(231) |
| 65 | | \\@7 = str("len") |
| 61 | \\@noreturn = primitive(noreturn) |
| 62 | \\@void = primitive(void) |
| 63 | \\@usize = primitive(usize) |
| 64 | \\@0 = int(0) |
| 65 | \\@1 = int(1) |
| 66 | \\@2 = int(2) |
| 67 | \\@3 = int(3) |
| 68 | \\ |
| 69 | \\@syscall_array = str("syscall") |
| 70 | \\@sysoutreg_array = str("={rax}") |
| 71 | \\@rax_array = str("{rax}") |
| 72 | \\@rdi_array = str("{rdi}") |
| 73 | \\@rcx_array = str("rcx") |
| 74 | \\@r11_array = str("r11") |
| 75 | \\@rdx_array = str("{rdx}") |
| 76 | \\@rsi_array = str("{rsi}") |
| 77 | \\@memory_array = str("memory") |
| 78 | \\@len_array = str("len") |
| 66 | 79 | \\ |
| 67 | | \\@8 = fn(@3, { |
| 68 | | \\ %0 = as(@2, @5) ; SYS_write |
| 69 | | \\ %1 = as(@2, @5) ; STDOUT_FILENO |
| 70 | | \\ %2 = ptrtoint(@0) ; msg ptr |
| 71 | | \\ %3 = fieldptr(@0, @7) ; msg len ptr |
| 72 | | \\ %4 = deref(%3) ; msg len |
| 73 | | \\ %sysoutreg = str("={rax}") |
| 74 | | \\ %rax = str("{rax}") |
| 75 | | \\ %rdi = str("{rdi}") |
| 76 | | \\ %rsi = str("{rsi}") |
| 77 | | \\ %rdx = str("{rdx}") |
| 78 | | \\ %rcx = str("rcx") |
| 79 | | \\ %r11 = str("r11") |
| 80 | | \\ %memory = str("memory") |
| 81 | | \\ %syscall = str("syscall") |
| 82 | | \\ %5 = asm(%syscall, @2, |
| 80 | \\@msg = str("Hello, world!\n") |
| 81 | \\ |
| 82 | \\@start_fnty = fntype([], @noreturn, cc=Naked) |
| 83 | \\@start = fn(@start_fnty, { |
| 84 | \\ %SYS_exit_group = int(231) |
| 85 | \\ %exit_code = as(@usize, @0) |
| 86 | \\ |
| 87 | \\ %syscall = ref(@syscall_array) |
| 88 | \\ %sysoutreg = ref(@sysoutreg_array) |
| 89 | \\ %rax = ref(@rax_array) |
| 90 | \\ %rdi = ref(@rdi_array) |
| 91 | \\ %rcx = ref(@rcx_array) |
| 92 | \\ %rdx = ref(@rdx_array) |
| 93 | \\ %rsi = ref(@rsi_array) |
| 94 | \\ %r11 = ref(@r11_array) |
| 95 | \\ %memory = ref(@memory_array) |
| 96 | \\ |
| 97 | \\ %SYS_write = as(@usize, @1) |
| 98 | \\ %STDOUT_FILENO = as(@usize, @1) |
| 99 | \\ |
| 100 | \\ %msg_ptr = ref(@msg) |
| 101 | \\ %msg_addr = ptrtoint(%msg_ptr) |
| 102 | \\ |
| 103 | \\ %len_name = ref(@len_array) |
| 104 | \\ %msg_len_ptr = fieldptr(%msg_ptr, %len_name) |
| 105 | \\ %msg_len = deref(%msg_len_ptr) |
| 106 | \\ %rc_write = asm(%syscall, @usize, |
| 83 | 107 | \\ volatile=1, |
| 84 | 108 | \\ output=%sysoutreg, |
| 85 | 109 | \\ inputs=[%rax, %rdi, %rsi, %rdx], |
| 86 | 110 | \\ clobbers=[%rcx, %r11, %memory], |
| 87 | | \\ args=[%0, %1, %2, %4]) |
| 111 | \\ args=[%SYS_write, %STDOUT_FILENO, %msg_addr, %msg_len]) |
| 88 | 112 | \\ |
| 89 | | \\ %6 = as(@2, @6) ;SYS_exit_group |
| 90 | | \\ %7 = as(@2, @4) ;exit code |
| 91 | | \\ %8 = asm(%syscall, @2, |
| 113 | \\ %rc_exit = asm(%syscall, @usize, |
| 92 | 114 | \\ volatile=1, |
| 93 | 115 | \\ output=%sysoutreg, |
| 94 | 116 | \\ inputs=[%rax, %rdi], |
| 95 | 117 | \\ clobbers=[%rcx, %r11, %memory], |
| 96 | | \\ args=[%6, %7]) |
| 118 | \\ args=[%SYS_exit_group, %exit_code]) |
| 97 | 119 | \\ |
| 98 | | \\ %9 = unreachable() |
| 99 | | \\}) |
| 120 | \\ %99 = unreachable() |
| 121 | \\}); |
| 100 | 122 | \\ |
| 101 | 123 | \\@9 = str("_start") |
| 102 | | \\@10 = export(@9, @8) |
| 124 | \\@10 = ref(@9) |
| 125 | \\@11 = export(@10, @start) |
| 103 | 126 | , |
| 104 | 127 | \\Hello, world! |
| 105 | 128 | \\ |