| ... | ... | @@ -65,74 +65,148 @@ pub fn addCases(ctx: *TestContext) void { |
| 65 | 65 | return; |
| 66 | 66 | } |
| 67 | 67 | |
| 68 | | ctx.addZIRCompareOutput("hello world ZIR", |
| 69 | | \\@noreturn = primitive(noreturn) |
| 70 | | \\@void = primitive(void) |
| 71 | | \\@usize = primitive(usize) |
| 72 | | \\@0 = int(0) |
| 73 | | \\@1 = int(1) |
| 74 | | \\@2 = int(2) |
| 75 | | \\@3 = int(3) |
| 76 | | \\ |
| 77 | | \\@syscall_array = str("syscall") |
| 78 | | \\@sysoutreg_array = str("={rax}") |
| 79 | | \\@rax_array = str("{rax}") |
| 80 | | \\@rdi_array = str("{rdi}") |
| 81 | | \\@rcx_array = str("rcx") |
| 82 | | \\@r11_array = str("r11") |
| 83 | | \\@rdx_array = str("{rdx}") |
| 84 | | \\@rsi_array = str("{rsi}") |
| 85 | | \\@memory_array = str("memory") |
| 86 | | \\@len_array = str("len") |
| 87 | | \\ |
| 88 | | \\@msg = str("Hello, world!\n") |
| 89 | | \\ |
| 90 | | \\@start_fnty = fntype([], @noreturn, cc=Naked) |
| 91 | | \\@start = fn(@start_fnty, { |
| 92 | | \\ %SYS_exit_group = int(231) |
| 93 | | \\ %exit_code = as(@usize, @0) |
| 94 | | \\ |
| 95 | | \\ %syscall = ref(@syscall_array) |
| 96 | | \\ %sysoutreg = ref(@sysoutreg_array) |
| 97 | | \\ %rax = ref(@rax_array) |
| 98 | | \\ %rdi = ref(@rdi_array) |
| 99 | | \\ %rcx = ref(@rcx_array) |
| 100 | | \\ %rdx = ref(@rdx_array) |
| 101 | | \\ %rsi = ref(@rsi_array) |
| 102 | | \\ %r11 = ref(@r11_array) |
| 103 | | \\ %memory = ref(@memory_array) |
| 104 | | \\ |
| 105 | | \\ %SYS_write = as(@usize, @1) |
| 106 | | \\ %STDOUT_FILENO = as(@usize, @1) |
| 107 | | \\ |
| 108 | | \\ %msg_ptr = ref(@msg) |
| 109 | | \\ %msg_addr = ptrtoint(%msg_ptr) |
| 110 | | \\ |
| 111 | | \\ %len_name = ref(@len_array) |
| 112 | | \\ %msg_len_ptr = fieldptr(%msg_ptr, %len_name) |
| 113 | | \\ %msg_len = deref(%msg_len_ptr) |
| 114 | | \\ %rc_write = asm(%syscall, @usize, |
| 115 | | \\ volatile=1, |
| 116 | | \\ output=%sysoutreg, |
| 117 | | \\ inputs=[%rax, %rdi, %rsi, %rdx], |
| 118 | | \\ clobbers=[%rcx, %r11, %memory], |
| 119 | | \\ args=[%SYS_write, %STDOUT_FILENO, %msg_addr, %msg_len]) |
| 120 | | \\ |
| 121 | | \\ %rc_exit = asm(%syscall, @usize, |
| 122 | | \\ volatile=1, |
| 123 | | \\ output=%sysoutreg, |
| 124 | | \\ inputs=[%rax, %rdi], |
| 125 | | \\ clobbers=[%rcx, %r11, %memory], |
| 126 | | \\ args=[%SYS_exit_group, %exit_code]) |
| 127 | | \\ |
| 128 | | \\ %99 = unreachable() |
| 129 | | \\}); |
| 130 | | \\ |
| 131 | | \\@9 = str("_start") |
| 132 | | \\@10 = ref(@9) |
| 133 | | \\@11 = export(@10, @start) |
| 134 | | , |
| 135 | | \\Hello, world! |
| 136 | | \\ |
| 68 | ctx.addZIRCompareOutput( |
| 69 | "hello world ZIR, update msg", |
| 70 | &[_][]const u8{ |
| 71 | \\@noreturn = primitive(noreturn) |
| 72 | \\@void = primitive(void) |
| 73 | \\@usize = primitive(usize) |
| 74 | \\@0 = int(0) |
| 75 | \\@1 = int(1) |
| 76 | \\@2 = int(2) |
| 77 | \\@3 = int(3) |
| 78 | \\ |
| 79 | \\@syscall_array = str("syscall") |
| 80 | \\@sysoutreg_array = str("={rax}") |
| 81 | \\@rax_array = str("{rax}") |
| 82 | \\@rdi_array = str("{rdi}") |
| 83 | \\@rcx_array = str("rcx") |
| 84 | \\@r11_array = str("r11") |
| 85 | \\@rdx_array = str("{rdx}") |
| 86 | \\@rsi_array = str("{rsi}") |
| 87 | \\@memory_array = str("memory") |
| 88 | \\@len_array = str("len") |
| 89 | \\ |
| 90 | \\@msg = str("Hello, world!\n") |
| 91 | \\ |
| 92 | \\@start_fnty = fntype([], @noreturn, cc=Naked) |
| 93 | \\@start = fn(@start_fnty, { |
| 94 | \\ %SYS_exit_group = int(231) |
| 95 | \\ %exit_code = as(@usize, @0) |
| 96 | \\ |
| 97 | \\ %syscall = ref(@syscall_array) |
| 98 | \\ %sysoutreg = ref(@sysoutreg_array) |
| 99 | \\ %rax = ref(@rax_array) |
| 100 | \\ %rdi = ref(@rdi_array) |
| 101 | \\ %rcx = ref(@rcx_array) |
| 102 | \\ %rdx = ref(@rdx_array) |
| 103 | \\ %rsi = ref(@rsi_array) |
| 104 | \\ %r11 = ref(@r11_array) |
| 105 | \\ %memory = ref(@memory_array) |
| 106 | \\ |
| 107 | \\ %SYS_write = as(@usize, @1) |
| 108 | \\ %STDOUT_FILENO = as(@usize, @1) |
| 109 | \\ |
| 110 | \\ %msg_ptr = ref(@msg) |
| 111 | \\ %msg_addr = ptrtoint(%msg_ptr) |
| 112 | \\ |
| 113 | \\ %len_name = ref(@len_array) |
| 114 | \\ %msg_len_ptr = fieldptr(%msg_ptr, %len_name) |
| 115 | \\ %msg_len = deref(%msg_len_ptr) |
| 116 | \\ %rc_write = asm(%syscall, @usize, |
| 117 | \\ volatile=1, |
| 118 | \\ output=%sysoutreg, |
| 119 | \\ inputs=[%rax, %rdi, %rsi, %rdx], |
| 120 | \\ clobbers=[%rcx, %r11, %memory], |
| 121 | \\ args=[%SYS_write, %STDOUT_FILENO, %msg_addr, %msg_len]) |
| 122 | \\ |
| 123 | \\ %rc_exit = asm(%syscall, @usize, |
| 124 | \\ volatile=1, |
| 125 | \\ output=%sysoutreg, |
| 126 | \\ inputs=[%rax, %rdi], |
| 127 | \\ clobbers=[%rcx, %r11, %memory], |
| 128 | \\ args=[%SYS_exit_group, %exit_code]) |
| 129 | \\ |
| 130 | \\ %99 = unreachable() |
| 131 | \\}); |
| 132 | \\ |
| 133 | \\@9 = str("_start") |
| 134 | \\@10 = ref(@9) |
| 135 | \\@11 = export(@10, @start) |
| 136 | , |
| 137 | \\@noreturn = primitive(noreturn) |
| 138 | \\@void = primitive(void) |
| 139 | \\@usize = primitive(usize) |
| 140 | \\@0 = int(0) |
| 141 | \\@1 = int(1) |
| 142 | \\@2 = int(2) |
| 143 | \\@3 = int(3) |
| 144 | \\ |
| 145 | \\@syscall_array = str("syscall") |
| 146 | \\@sysoutreg_array = str("={rax}") |
| 147 | \\@rax_array = str("{rax}") |
| 148 | \\@rdi_array = str("{rdi}") |
| 149 | \\@rcx_array = str("rcx") |
| 150 | \\@r11_array = str("r11") |
| 151 | \\@rdx_array = str("{rdx}") |
| 152 | \\@rsi_array = str("{rsi}") |
| 153 | \\@memory_array = str("memory") |
| 154 | \\@len_array = str("len") |
| 155 | \\ |
| 156 | \\@msg = str("Hello, world!\n") |
| 157 | \\@msg2 = str("HELL WORLD\n") |
| 158 | \\ |
| 159 | \\@start_fnty = fntype([], @noreturn, cc=Naked) |
| 160 | \\@start = fn(@start_fnty, { |
| 161 | \\ %SYS_exit_group = int(231) |
| 162 | \\ %exit_code = as(@usize, @0) |
| 163 | \\ |
| 164 | \\ %syscall = ref(@syscall_array) |
| 165 | \\ %sysoutreg = ref(@sysoutreg_array) |
| 166 | \\ %rax = ref(@rax_array) |
| 167 | \\ %rdi = ref(@rdi_array) |
| 168 | \\ %rcx = ref(@rcx_array) |
| 169 | \\ %rdx = ref(@rdx_array) |
| 170 | \\ %rsi = ref(@rsi_array) |
| 171 | \\ %r11 = ref(@r11_array) |
| 172 | \\ %memory = ref(@memory_array) |
| 173 | \\ |
| 174 | \\ %SYS_write = as(@usize, @1) |
| 175 | \\ %STDOUT_FILENO = as(@usize, @1) |
| 176 | \\ |
| 177 | \\ %msg_ptr = ref(@msg2) |
| 178 | \\ %msg_addr = ptrtoint(%msg_ptr) |
| 179 | \\ |
| 180 | \\ %len_name = ref(@len_array) |
| 181 | \\ %msg_len_ptr = fieldptr(%msg_ptr, %len_name) |
| 182 | \\ %msg_len = deref(%msg_len_ptr) |
| 183 | \\ %rc_write = asm(%syscall, @usize, |
| 184 | \\ volatile=1, |
| 185 | \\ output=%sysoutreg, |
| 186 | \\ inputs=[%rax, %rdi, %rsi, %rdx], |
| 187 | \\ clobbers=[%rcx, %r11, %memory], |
| 188 | \\ args=[%SYS_write, %STDOUT_FILENO, %msg_addr, %msg_len]) |
| 189 | \\ |
| 190 | \\ %rc_exit = asm(%syscall, @usize, |
| 191 | \\ volatile=1, |
| 192 | \\ output=%sysoutreg, |
| 193 | \\ inputs=[%rax, %rdi], |
| 194 | \\ clobbers=[%rcx, %r11, %memory], |
| 195 | \\ args=[%SYS_exit_group, %exit_code]) |
| 196 | \\ |
| 197 | \\ %99 = unreachable() |
| 198 | \\}); |
| 199 | \\ |
| 200 | \\@9 = str("_start") |
| 201 | \\@10 = ref(@9) |
| 202 | \\@11 = export(@10, @start) |
| 203 | }, |
| 204 | &[_][]const u8{ |
| 205 | \\Hello, world! |
| 206 | \\ |
| 207 | , |
| 208 | \\HELL WORLD |
| 209 | \\ |
| 210 | }, |
| 137 | 211 | ); |
| 138 | 212 | } |