program Hello {
	section module {
 		sdl,
		std
	}
	section data {
		int rax = 0
		int rbx = 0
		int rdx = 0
		int rsi = 0
		int rdi = 0
		int r8 = 0
		int r9 = 0
		int r10 = 0
		int r11 = 0
		int r12 = 0
		string str_0 = "failed to init SDL"
		string str_1 = "sdl init passed"
		string str_2 = "Hello SDL"
		string str_3 = "failed to create window"
		string str_4 = "window created"
		string str_5 = "failed to create renderer"
		string str_6 = "renderer created"
		string fmt_str = "%s "
		string newline = "\n"
		int result = 0
		int window_id = 0
		int renderer = 0
		int event_type_result = 0
		int running = 0
	}
	section code {
	start:
		invoke init
		return rbx
		mov result, rbx
		cmp result, 0
		je ELSE_0
		print fmt_str, str_0
		print newline
		exit 0
		jmp ENDIF_1
	ELSE_0:
		print fmt_str, str_1
		print newline
	ENDIF_1:
		mov rsi, 100
		mov rdi, 100
		mov r8, 640
		mov r9, 480
		mov r10, 4
		invoke create_window, str_2, rsi, rdi, r8, r9, r10
		return rdx
		mov window_id, rdx
		mov rsi, 0
		sub rsi, 1
		cmp window_id, rsi
		jne ELSE_4
		print fmt_str, str_3
		print newline
		invoke quit
		exit 0
		jmp ENDIF_5
	ELSE_4:
		print fmt_str, str_4
		print newline
	ENDIF_5:
		mov r8, 0
		sub r8, 1
		mov r10, 2
		invoke create_renderer, window_id, r8, r10
		return r9
		mov renderer, r9
		mov r8, 0
		sub r8, 1
		cmp renderer, r8
		jne ELSE_8
		print fmt_str, str_5
		print newline
		invoke destroy_window, window_id
		invoke quit
		exit 0
		jmp ENDIF_9
	ELSE_8:
		print fmt_str, str_6
		print newline
	ENDIF_9:
		mov running, 1
	WHILE_12:
		cmp running, 0
		je ENDWHILE_13
	WHILE_14:
		invoke poll_event
		return r9
		cmp r9, 0
		je ENDWHILE_15
		invoke get_event_type
		return r9
		mov event_type_result, r9
		cmp event_type_result, 256
		jne ELSE_18
		mov running, 0
	ELSE_18:
		cmp event_type_result, 768
		jne ELSE_22
		invoke get_key_code
		return r10
		cmp r10, 27
		jne ELSE_22
		mov running, 0
	ELSE_22:
		jmp WHILE_14
	ENDWHILE_15:
		mov r9, 0
		mov r10, 0
		mov r11, 0
		mov r12, 255
		invoke set_draw_color, renderer, r9, r10, r11, r12
		invoke clear, renderer
		invoke present, renderer
		jmp WHILE_12
	ENDWHILE_13:
		invoke destroy_renderer, renderer
		invoke destroy_window, window_id
		invoke quit
		done
	}
}